Tengo una matriz donde quiero buscar uid
y obtener la clave de la matriz.
Ejemplos
Supongamos que tenemos la siguiente matriz bidimensional:
$userdb = array(
array(
'uid' => '100',
'name' => 'Sandra Shush',
'pic_square' => 'urlof100'
),
array(
'uid' => '5465',
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100'
),
array(
'uid' => '40489',
'name' => 'Michael',
'pic_square' => 'urlof40489'
)
);
La llamada a la función search_by_uid(100)
(uid del primer usuario) debería regresar 0
.
La llamada a la función search_by_uid(40489)
debería regresar 2
.
Intenté hacer bucles, pero quiero un código de ejecución más rápido.
php
arrays
multidimensional-array
Rachit
fuente
fuente
array_column
respuestas de una línea. Los modifiqué todos para devolver la matriz descubierta real, no solo la clave, porque generalmente ese es mi caso de uso. El método de función obtuvo 0.361, search-col 0.184 y keys-col 0.189 micro micro delay en 1000 ejecuciones para cada método.Respuestas:
Esto funcionará Deberías llamarlo así:
Es importante saber que si está utilizando
===
operadores, los tipos comparados tienen que ser exactamente iguales, en este ejemplo, debe buscarstring
o simplemente usar==
en su lugar===
.Basado en la respuesta de angoru . En versiones posteriores de PHP (
>= 5.5.0
) puede usar one-liner.Aquí hay documentación: http://php.net/manual/en/function.array-column.php .
fuente
array_column($userdb, 'uid')
conarray_map(function($v){return $v['uid'];},$userdb)
array_search
, ¿no?foreach
bucle) funcionará más rápido porque se detiene tan pronto como se encuentre una coincidencia. La solución más nueva tiene que iterar a través de toda la matriz una vez para extraerarray_column
, luego recorrerla por segunda vez para realizar la búsqueda (hasta que encuentre una coincidencia). La solución más nueva es más fácil de leer, más concisa, pero el OP mencionó específicamente el rendimiento como un problemaSi está utilizando (PHP 5> = 5.5.0) no tiene que escribir su propia función para hacerlo, simplemente escriba esta línea y ya está.
Si solo quieres un resultado:
Para múltiples resultados
En caso de que tenga una matriz asociativa como se señala en los comentarios, puede hacerlo con:
Si está utilizando PHP <5.5.0, puede usar este backport , ¡gracias ramsey!
Actualización: He estado haciendo algunos puntos de referencia simples y el formulario de resultados múltiples parece ser el más rápido, ¡incluso más rápido que la función personalizada de Jakub!
fuente
array_search(40489, array_combine(array_keys($userdb), array_column($userdb, 'uid')))
En versiones posteriores de PHP (> = 5.5.0) puede usar esta línea:
fuente
Aprovechando la excelente respuesta de Jakub , aquí hay una búsqueda más generalizada que permitirá especificar la clave (no solo para uid):
Uso:
$results = searcharray('searchvalue', searchkey, $array);
fuente
Sé que esto ya fue respondido, pero lo usé y lo extendí un poco más en mi código para que no tuviera que buscar solo el uid. Solo quiero compartirlo con cualquier otra persona que pueda necesitar esa funcionalidad.
Aquí está mi ejemplo y tenga en cuenta que esta es mi primera respuesta. Saqué la matriz param porque solo necesitaba buscar una matriz específica, pero podía agregarla fácilmente. Quería buscar esencialmente más que solo el uid.
Además, en mi situación, puede haber varias claves para devolver como resultado de la búsqueda por otros campos que pueden no ser únicos.
Más tarde, terminé escribiendo esto para permitirme buscar otro valor y clave asociativa. Entonces, mi primer ejemplo le permite buscar un valor en cualquier clave asociativa específica y devolver todas las coincidencias.
Este segundo ejemplo muestra dónde se encuentra un valor ('Taylor') en una determinada clave asociativa (nombre_nombre) Y otro valor (verdadero) se encuentra en otra clave asociativa (empleada), y devuelve todas las coincidencias (Claves donde las personas con nombre 'Taylor' Y son empleados).
Uso de la función
Resultado
fuente
Parece que array_filter será la solución adecuada para esto ...
Código PHP
fuente
syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ';'
Modifiqué uno de los ejemplos debajo de la función de descripción array_search . La función
searchItemsByKey
devuelve todos los valores por $ clave de la matriz multidimensional (N niveles). Tal vez, sería útil para alguien. Ejemplo:Código de función:
fuente
Aquí hay un revestimiento para lo mismo,
fuente
Aunque esta es una pregunta antigua y tiene una respuesta aceptada, pensé que sugeriría un cambio a la respuesta aceptada. Entonces, en primer lugar, estoy de acuerdo en que la respuesta aceptada es correcta aquí.
En su lugar, reemplazar el 'uid' preestablecido con un parámetro en la función, por lo que ahora llamar al código siguiente significa que puede usar una función en múltiples tipos de matriz. Pequeño cambio, pero uno que hace la ligera diferencia.
Ejemplo de violín PHP
fuente
null
y luego, en el código, lo está comparandofalse
.Quiero comprobar que en la siguiente matriz
$arr
hay 'abc' existe en sub matrices o noEntonces puedo usar esto
Creo que esta es la forma más sencilla de definir
fuente
Tuve que usar una función que encuentra todos los elementos en una matriz. Así que modifiqué la función realizada por Jakub Truneček de la siguiente manera:
fuente
fuente
puedes usar esta función; https://github.com/serhatozles/ArrayAdvancedSearch
fuente
fuente
Prueba esto
fuente
Solo comparte, tal vez me guste esto.
fuente
Prueba esto también
fuente
Con la ayuda del código anterior, se pueden encontrar los datos (parcialmente coincidentes) de cualquier columna en la matriz 2D para que la identificación del usuario se pueda encontrar según sea necesario.
fuente
Ampliando la función que @mayhem creó, este ejemplo sería más una búsqueda "difusa" en caso de que solo desee hacer coincidir parte (la mayoría ) de una cadena de búsqueda:
Por ejemplo, el valor en la matriz es ¡Bienvenido a Nueva York! y querías la primera instancia de "¡Nueva York!"
fuente
fuente
Si la pregunta es decir
Respuesta:
fuente
mi solución:
fuente