En un bucle foreach() clásico después de la palabra as , ¿es posible usar la variable key como parte de la variable de value o viceversa?
* después de más de una década de desarrollo de PHP, recién ahora se me ocurrió investigar esta posibilidad.
Un foreach() siempre asigna la variable de value antes de asignar la variable key . ( Demostración )
Esto parece un poco contrario a la intuición porque $v parece estar declarado visualmente después de que se accede mediante declaración de key .
Esto significa que puede usar con seguridad:
$array = ['a', 'b']; $result = []; foreach ($array as $result["prefix_$v"] => $v); var_export($result);para producir:
array ( 'prefix_a' => 0, 'prefix_b' => 1, )La matriz recién generada tiene claves prefijadas basadas en los valores originales y los índices originales se convierten en los nuevos valores.
Sin el prefix_ a la cadena, la acción es efectivamente la misma que array_flip() .
Invertir las asignaciones para que la variable de value reciba la key no funciona según lo previsto. Es posible que desee generar ["prefix_0", "prefix_1"] pero no lo hace y también genera Avisos/Advertencias debido al intento de acceder a una variable no declarada. (La queja es solo en la primera iteración porque después de la primera iteración, se declara $k , es la clave de la iteración anterior).
$array = ['a', 'b']; $result = []; foreach ($array as $k => $result["prefix_$k"]); // not defined on first iteration -------^^ var_export($result);Mala salida:
Warning: Undefined variable $k in /in/iVm1u on line 6 array ( 'prefix_' => 'a', 'prefix_0' => 'b', )Para contexto adicional, ofreceré un ejemplo de trabajo más que genera una matriz multidimensional utilizando el valor para determinar las claves de la matriz en la matriz de salida. ( Demostración )
$array = [2, 3, 5]; $result = []; foreach ($array as $result[$v * $v][$v] => $v); var_export($result);Producción:
array ( 4 => array ( 2 => 0, ), 9 => array ( 3 => 1, ), 25 => array ( 5 => 2, ), )