Yo uso in_array()
para verificar si existe un valor en una matriz como a continuación,
$a = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $a))
{
echo "Got Irix";
}
//print_r($a);
pero ¿qué pasa con una matriz multidimensional (a continuación)? ¿Cómo puedo verificar ese valor si existe en la matriz múltiple?
$b = array(array("Mac", "NT"), array("Irix", "Linux"));
print_r($b);
o no debería usar in_array()
cuando se trata de la matriz multidimensional?
php
arrays
multidimensional-array
laukok
fuente
fuente
var_dump(array_sum(array_map(function ($tmp) {return in_array('NT',$tmp);}, $multiarray)) > 0);
$multiarray = array( "Hello", array("Mac", "NT"), array("Irix", "Linux"));
$tmp
es una matriz conis_array()
función. Si no es una matriz, proceda con un escenario diferente.Respuestas:
in_array()
no funciona en matrices multidimensionales. Podría escribir una función recursiva para hacer eso por usted:Uso:
fuente
_r
, análoga aprint_r()
, por ejemplo). Desciende a todas las matrices anidadas para buscar el valor hasta que no se encuentren más matrices. De esta manera, puede buscar en conjuntos de complejidad arbitraria en lugar de solo dos niveles de profundidad.Si sabe en qué columna buscar, puede usar array_search () y array_column ():
Esta idea está en la sección de comentarios de array_search () en el manual de PHP;
fuente
array_column
Esto también funcionará.
Uso:
fuente
foreach
bucle.$array
que tiene una clave asociativa que coincide$item
. Sin mencionar el potencial de hacer coincidir involuntariamente parte de una cadena cuando hay una comilla doble en la cadena misma. Solo confiaría en esta función en situaciones pequeñas / simples como esta pregunta.$item
contiene caracteres que arruinan el primer parámetro (expresión regular) depreg_match
Esto lo hará:
in_array
solo funciona en una matriz unidimensional, por lo que debe recorrer cada submatriz y ejecutarlain_array
en cada una.Como otros han señalado, esto solo será para una matriz bidimensional. Si tiene más matrices anidadas, una versión recursiva sería mejor. Vea las otras respuestas para ejemplos de eso.
fuente
)
al final de la línea mencionada.in_array()
con el tercer parámetro establecido entrue
. Mira aquí por qué: stackoverflow.com/questions/37080581/…si tu matriz así
Utilizar este
ejemplo:
echo in_multiarray("22", $array,"Age");
fuente
fuente
array_column()
Gran función, pero no funcionó para mí hasta que agregué
if($found) { break; }
elelseif
fuente
Para niños multidimensionales:
in_array('needle', array_column($arr, 'key'))
Para niños unidimensionales:
in_array('needle', call_user_func_array('array_merge', $arr))
fuente
array_column()
método, elcall_user_func_array('array_merge')
método también funciona con matrices secundarias basadas en índices, +1Siempre puede serializar su matriz multidimensional y hacer un
strpos
:Varios documentos para las cosas que usé:
fuente
Desde PHP 5.6 hay una solución mejor y más limpia para la respuesta original:
Con una matriz multidimensional como esta:
Podemos usar el operador splat :
Si tiene teclas de cadena como esta:
Tendrá que usar
array_values
para evitar el errorCannot unpack array with string keys
:fuente
La solución aceptada (al momento de escribir) por jwueller
Es perfectamente correcto pero puede tener un comportamiento no deseado al hacer una comparación débil (el parámetro
$strict = false
).Debido al malabarismo de tipos de PHP al comparar valores de diferentes tipos, ambos
y
Evalúa
true
porque"example"
está fundidoint
y convertido en0
.(Consulte ¿Por qué PHP considera que 0 es igual a una cadena? )
Si este no es el comportamiento deseado , puede ser conveniente convertir valores numéricos en una cadena antes de hacer una comparación no estricta:
fuente
Esta es la primera función de este tipo que encontré en el manual de php para in_array . Las funciones en las secciones de comentarios no siempre son las mejores, pero si no funciona, puedes mirar allí también :)
fuente
Aquí está mi propuesta basada en la solución json_encode () con:
Si no se encuentra la palabra, aún devuelve 0 igual a falso .
Espero eso ayude.
fuente
00
into10000
olo
intoHello
. Además, fallará si la aguja contiene cualquier carácter que sejson_encode
escape , como las comillas dobles.Creo que puedes usar array_key_exists hoy en día:
fuente
Estaba buscando una función que me permitiera buscar cadenas y matrices (como aguja) en la matriz (pajar), así que agregué a la respuesta @jwueller .
Aquí está mi código:
fuente
También funciona creando primero una nueva matriz unidimensional a partir de la original.
fuente
Versión más corta, para matrices multidimensionales creadas en base a conjuntos de resultados de bases de datos.
Volverá si la matriz $ os_list contiene 'XP' en el campo os_version.
fuente
Encontré una solución simple muy pequeña:
Si su matriz es:
entonces el código será como:
fuente
Utilicé este método para cualquier número de anidados y no requiere piratería
fuente
Por favor, inténtalo:
No estoy seguro acerca de la necesidad, pero esto podría funcionar para su requerimiento
fuente
$b
Las claves de la matriz son solo enteros ... no hay claves específicas en estas matrices ... yarray_keys($b["irix"])
solo arrojarán un error, porque$b["irix"]
no existe.¿Qué pasa con array_search? parece bastante más rápido que foreach según https://gist.github.com/Ocramius/1290076 ..
fuente
puedes usar así
http://php.net/manual/tr/function.array-intersect.php
fuente