Me preguntaba si es posible editar el objeto actual que se maneja dentro de un foreachbucle
Estoy trabajando con una matriz de objetos $questionsy quiero revisar y buscar las respuestas asociadas con ese objeto de pregunta en mi base de datos. Entonces, para cada pregunta, busque los objetos de respuesta y actualice la corriente $question dentro de mi foreachciclo para que pueda generar / procesar en otro lugar.
foreach($questions as $question){
    $question['answers'] = $answers_model->get_answers_by_question_id($question['question_id']);
}
Respuestas:
Hay 2 formas de hacer esto
De esta forma guardas la clave, para que puedas actualizarla nuevamente en la
$questionsvariable principalo
Agregar el
&mantendrá$questionsactualizado el. Pero yo diría que se recomienda el primero aunque sea más corto (ver comentario de Paystey)Según la
foreachdocumentación de PHP :fuente
foreachRealmente no se recomiendan las referencias en , la forma en que lasforeachtransferencias alrededor de la parte de valor del ciclo dan como resultado un comportamiento impredecible. Puede ser más largo, pero está mucho más seguro si usa el método 1 aquí.foreach, con respecto al horror como este: stackoverflow.com/questions/3307409/… (@Nico, FYI, también.)Seguramente usar
array_mapy si usar una implementación de contenedorArrayAccesspara derivar objetos es solo una forma más inteligente y semántica de hacerlo.La semántica del mapa de matriz es similar en la mayoría de los lenguajes e implementaciones que he visto. Está diseñado para devolver una matriz modificada basada en el elemento de matriz de entrada (alto nivel que ignora la preferencia de tipo de compilación / tiempo de ejecución del lenguaje); un bucle está destinado a realizar más lógica.
Para recuperar objetos por ID / PK, dependiendo de si está usando SQL o no (parece sugerido), usaría un filtro para asegurarme de obtener una matriz de PK válidos, luego implosionar con una coma y colocarlo en una
IN()cláusula SQL para devuelve el conjunto de resultados. Realiza una llamada en lugar de varias a través de SQL, optimizando un poco elcall->waitciclo. Lo más importante es que mi código se leerá bien para alguien de cualquier idioma con un grado de competencia y no nos encontremos con problemas de mutabilidad.vs
Si sabe lo que está haciendo, nunca tendrá problemas de mutabilidad (teniendo en cuenta que si tiene la intención de sobrescribir
$arr, siempre podría$arr = array_mapser explícito.fuente