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 ID
propiedad tenga el $v
valor?
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$searchedValue
al alcance del cierre. Se&
usa para crear una referencia que solo es necesaria si$searchedValue
se ha modificado dentro del cierre.global
era 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_filter
devuelve una matriz y no se detendrá en el primer valor encontrado.$searchedValue
dentro de la función. Pero afuera está.$searchedValue
está fuera del alcance del cierre. En segundo lugar, ¿cómo crees que funcionan estos métodos de matriz? Todos recorren la matriz internamente$searchedValue
necesita 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_filter
función solo devuelve$neededObject
si la condición de retorno estrue
Si
$searchedValue
es una cadena o un entero:Si
$searchedValue
es 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