La matriz se ve así:
[0] => stdClass Object
(
[ID] => 420
[name] => Mary
)
[1] => stdClass Object
(
[ID] => 10957
[name] => Blah
)
...
Y tengo una variable entera llamada $v.
¿Cómo podría seleccionar una entrada de matriz que tenga un objeto donde la IDpropiedad tenga el $vvalor?

isset($item)pero prefiero inicializar las variables correctamenteif($v == $struct["ID"]){...YurkamTim tiene razón. Solo necesita una modificación:
Después de la función ($) necesita un puntero a la variable externa mediante "use (& $ searchingValue)" y luego puede acceder a la variable externa. También puedes modificarlo.
fuente
&se requiere cuando se importa$searchedValueal alcance del cierre. Se&usa para crear una referencia que solo es necesaria si$searchedValuese ha modificado dentro del cierre.globalera el único para compartir datos en funciones! Pero es una pena si esto es realmente lento. :(fuente
He encontrado una solución más elegante aquí . Adaptado a la pregunta, puede verse así:
fuente
array_filterdevuelve una matriz y no se detendrá en el primer valor encontrado.$searchedValuedentro de la función. Pero afuera está.$searchedValueestá fuera del alcance del cierre. En segundo lugar, ¿cómo crees que funcionan estos métodos de matriz? Todos recorren la matriz internamente$searchedValuenecesita escribirfunction ($e) use ($searchedValue) {El uso de array_column para volver a indexar ahorrará tiempo si necesita buscar varias veces:
Entonces puedes simplemente
$lookup[$id]a voluntad.fuente
Usarlo como quisieras sería algo como:
fuente
Tratar
ejemplo de trabajo aquí
fuente
Arreglando un pequeño error de @YurkaTim , su solución funciona para mí pero agrega
use:Para usar
$searchedValue, dentro de la función, una solución puede seruse ($searchedValue)después de los parámetros de la funciónfunction ($e) HERE.la
array_filterfunción solo devuelve$neededObjectsi la condición de retorno estrueSi
$searchedValuees una cadena o un entero:Si
$searchedValuees una matriz donde necesitamos verificar con una lista:fuente
var_dump($neededObject);:)A veces me gusta usar la función array_reduce () para llevar a cabo la búsqueda. Es similar a array_filter () pero no afecta la matriz buscada, lo que le permite realizar múltiples búsquedas en la misma matriz de objetos.
fuente
if ($current_item->someProperty == $needle){ $result_array[] = $current_item; }Hice esto con algún tipo de mapa de teclas de Java. Si hace eso, no necesita recorrer su matriz de objetos cada vez.
salida:
fuente
Forma de obtener el primer valor al instante:
fuente
Publiqué lo que uso para resolver este problema de manera eficiente aquí usando un algoritmo de búsqueda binaria rápida: https://stackoverflow.com/a/52786742/1678210
No quería copiar la misma respuesta. Alguien más lo había preguntado un poco diferente, pero la respuesta es la misma.
fuente