es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Array.prototype.find() en PHP que devuelve una referencia

Estoy tratando de crear una función que funcione como Array.prototype.find() en javascript pero para PHP.

Mi array tiene esa estructura:

$array = [
[“id” => 54, “type” => 5, “content” => [
[“id” => 99, “type” => 516],
[“id” => 88, “type” => 464],
[“id” => 41, “type” => 845]]
],
[“id” => 54, “type” => 55, “content” => [
[“id” => 54, “type” => 578],
[“id” => 54, “type” => 354],
[“id” => 75, “type” => 458]]
],
[“id” => 65, “type” => 59, “content” => [
[“id” => 87, “type” => 5454],
[“id” => 65, “type” => 245],
[“id” => 65, “type” => 24525]]
]
];

Luego creé mi función para buscar como en javascript:

function array_find($array, $function){
foreach($array as $value){
if($function($value)){
return $value;
}
}
}
$id=54;
$type=55;
$mycontent = array_find(
$array,
function($foo) {
global $id;
global $type;
return $foo[“id”] == $id && $foo[“type”] == $type;
}
)[“content”];

Funciona. Sin embargo, quiero que el resultado devuelto sea una referencia y no un valor, para que luego pueda agregar / eliminar elementos dentro del array devuelto.

¿Cómo puedo hacer esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para hacer que el resultado devuelto sea una referencia, puedes usar el símbolo & antes del nombre de la variable en el argumento de la función y también antes de la declaración de retorno. Esto pasará la variable como una referencia a la función y hará que el resultado devuelto también sea una referencia.

    Aquí está el código modificado de la función:

    function &array_find(&$array, $function){
        foreach($array as &$value){
            if($function($value)){
                return $value;
            }
        }
    }
    
    $id=54;
    $type=55;
    $mycontent = &array_find(
        $array,
        function(&$foo) use ($id, $type) {
            return $foo["id"] == $id && $foo["type"] == $type;
        }
    )["content"];
    

    Ten en cuenta que los parámetros $array y $foo tienen el símbolo & antes de sus nombres, lo que indica que se pasan por referencia. Además, se utiliza la sintaxis use ($id, $type) para pasar las variables $id y $type a la función anónima.

    Con estas modificaciones, la variable $mycontent ahora contendrá una referencia al array "content" en el $array original. Puedes agregar o eliminar elementos de este array y los cambios se reflejarán en el $array original.

Comments are closed.