valor obtener multidimensional index in_array claves buscar array_column array php arrays multidimensional-array

obtener - Compruebe si existe una clave de matriz específica en una matriz multidimensional-PHP



php array key value (8)

Tengo una matriz multidimensional, por ejemplo (esto puede tener muchos niveles de profundidad):

$array = Array ( [21] => Array ( ) [24] => Array ( [22] => Array ( ) [25] => Array ( [26] => Array ( ) ) ) )

Estoy intentando recorrerlo para ver si existe una cierta clave:

$keySearch = 22; // key searching for function findKey($array, $keySearch) { foreach ($array as $item){ if (isset($item[$keySearch]) && false === findKey($item[$keySearch], $item)){ echo ''yes, it exists''; } } } findKey($array, $keySearch);

Pero no encuentra nada. ¿Hay algún error en el bucle?


Aquí hay una solución de una línea:

echo strpos(json_encode($array), $key) > 0 ? "found" : "not found";

Esto convierte la matriz en una cadena que contiene el equivalente de JSON, luego usa esa cadena como el argumento del pajar de la función strpos () y usa la clave $ como el argumento de la aguja (la clave $ es el valor que se encuentra en la cadena JSON).

Puede ser útil hacer esto para ver la cadena convertida: echo json_encode($array);

Asegúrese de incluir el argumento de la aguja entre comillas simples y luego comillas dobles porque la parte del nombre del par nombre / valor en la cadena JSON aparecerá con comillas dobles a su alrededor. Por ejemplo, si busca 22 en la matriz a continuación, $key = ''"22"'' dará el resultado correcto de no encontrarse en esta matriz:

$array = Array ( 21 => Array ( ), 24 => Array ( 522 => Array ( ), 25 => Array ( 26 => Array ( ) ) ) );

Sin embargo, si las comillas simples se dejan, como en $key = "22" entonces se obtendrá un resultado incorrecto de la matriz anterior.

EDITAR: Una mejora adicional sería buscar $key = ''"22":''; solo en caso de que exista un valor de "22" en la matriz. es decir. 27 => "22" Además, este enfoque no es a prueba de balas. Un resultado incorrecto podría aparecer si alguno de los valores de la matriz contiene la cadena ''"22":''


Jugué con tu código para que funcione:

function findKey($array, $keySearch) { foreach ($array as $key => $item) { if ($key == $keySearch) { echo ''yes, it exists''; return true; } elseif (is_array($item) && findKey($item, $keySearch)) { return true; } } return false; }


Por supuesto algunos errores, ¿esto es más o menos lo que buscas? (Código no probado):

$keySearch=22; // búsqueda de teclas para

function findKey($array, $keySearch) { // check whether input is an array if(is_array($array) { foreach ($array as $item) { if (isset($item[$keySearch]) || findKey($item, $keysearch) === true) { echo ''yes, it exists''; return true; } } } }


Primero crea una función para obtener una matriz de todas las claves:

function array_keys_multi(array $array) { $keys = array(); foreach($array as $key => $value) { $keys[] = $key; if (is_array($array[$key])) $keys = array_merge($keys, array_keys_multi($array[$key])); } return $keys; }

A continuación, compruebe la existencia:

strpos(json_encode(array_keys_multi($array)), ''"key"'')


devuelve false si no existe, devuelve la primera instancia si existe;

function searchArray( array $array, $search ) { while( $array ) { if( isset( $array[ $search ] ) ) return $array[ $search ]; $segment = array_shift( $array ); if( is_array( $segment ) ) { if( $return = searchArray( $segment, $search ) ) return $return; } } } return false; }


array_key_exists() es helpful .

Entonces algo como esto:

function multiKeyExists(array $arr, $key) { // is in base array? if (array_key_exists($key, $arr)) { return true; } // check arrays contained in this array foreach ($arr as $element) { if (is_array($element)) { if (multiKeyExists($element, $key)) { return true; } } } return false; }

Ejemplo de trabajo: http://codepad.org/GU0qG5su


function findKey($array, $keySearch) { // check if it''s even an array if (!is_array($array)) return false; // key exists if (array_key_exists($keySearch, $array)) return true; // key isn''t in this array, go deeper foreach($array as $key => $val) { // return true if it''s found if (findKey($val, $keySearch)) return true; } return false; } // test $array = Array ( 21 => Array ( 24 => ''ok'' ), 24 => Array ( 22 => Array ( 29 => ''ok'' ), 25 => Array ( 26 => Array ( 32 => ''ok'' ) ) ) ); $findKeys = Array(21, 22, 23, 24, 25, 26, 27, 28, 29, 30); foreach ($findKeys as $key) { echo (findKey($array, $key)) ? ''found '' : ''not found ''; echo $key.''<br>''; }


if(isset($arr[''first''][''second''][''third''])){ // exists }