¿Cómo convertir una matriz de matrices u objetos a una matriz asociativa?

Estoy acostumbrado a la función map () de perl donde la devolución de llamada puede asignar la clave y el valor, creando así una matriz asociativa donde la entrada era una matriz plana. Soy consciente dearray_fill_keys() lo que puede ser útil si todo lo que quiere hacer es crear un hash de estilo de diccionario, pero ¿qué sucede si no quiere que todos los valores sean iguales? Obviamente, todas las cosas se pueden hacer con la iteración foreach, pero ¿qué otros métodos (posiblemente más elegantes) existen?

Editar: Añadiendo un ejemplo para aclarar la transformación. Por favor, no se obsesione con la transformación, la pregunta es sobre la transformación de una lista plana en un hash donde no podemos asumir que todos los valores serán los mismos.

$original_array: ('a', 'b', 'c', 'd')
$new_hash: ('a'=>'yes', 'b'=>'no', 'c'=>'yes', 'd'=>'no')

*note: the values in this example are arbitrary, governed by some business logic that is not really relevant to this question. For example, perhaps it's based on the even-oddness of the ordinal value of the key

Ejemplo del mundo real Entonces, al usar una respuesta que se proporcionó aquí, aquí se explica cómo se puede analizar a través de $ _POST para obtener una lista de solo aquellos campos de entrada que coinciden con un criterio dado. Esto podría ser útil, por ejemplo, si tiene muchos campos de entrada en su formulario, pero un cierto grupo de ellos debe procesarse juntos.

En este caso, tengo varios campos de entrada que representan asignaciones a una base de datos. Cada uno de los campos de entrada se ve así:<input name="field-user_email" value="2" /> donde cada uno de este tipo de campo tiene el prefijo "campo-".

lo que queremos hacer es, primero, obtener una lista de solo aquellos campos de entrada que realmente comienzan con "campo-", luego queremos crear una matriz asociativa llamada$mapped_fields que tiene el nombre del campo extraído como la clave y el valor del campo de entrada real como el valor.

$mapped_fields = array_reduce( preg_grep( '/field-.+/', array_keys( $_POST ) ), function( $hash, $field ){ $hash[substr( $field, 6 )] = $_POST[$field]; return $hash; } );

Qué salidas:

Array ( [date_of_birth] => 1 [user_email] => 2 [last_name] => 3 [first_name] => 4 [current_position] => 6 )

(Por lo tanto, solo para evitar a los detractores, permítanme aceptar que este poco de código compacto es mucho menos legible que un simple bucle que recorre $ _POST y, para cada clave, verifica si tiene el prefijo y si entonces, lo hace estallar y su valor en una matriz)

Respuestas a la pregunta(3)

Su respuesta a la pregunta