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?
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:
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 sintaxisuse ($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.