2014-02-19 3 views
1

У меня был бы довольно простой вопрос сегодня. У нас есть следующий ресурс:Как проверить, содержит ли массив другой массив в PHP?

$a = array(1 => 5, 2 => 3, 3 => 13, 9 => array('test'), 4 => 32, 5 => 33); 

Как это на самом деле можно найти, если массив «а» есть элемент массива в нем и вернуть ключ, если есть один (или больше)?

+3

Вы можете, вероятно, использовать [ 'in_array()'] (http://www.php.net/in_array) –

+0

ли 'array_diff()' функцию, которую вы ищете? –

+1

Я бы, вероятно, пропустил его и проверил с помощью is_array - захватил ключ и вернул ключи, когда закончите – wribit

ответ

4

Один из возможных подходов:

function look_for_array(array $test_var) { 
    foreach ($test_var as $key => $el) { 
    if (is_array($el)) { 
     return $key; 
    } 
    } 
    return null; 
} 

Это довольно тривиально, чтобы преобразовать эту функцию в сборе все такие ключи:

function look_for_all_arrays(array $test_var) { 
    $keys = []; 
    foreach ($test_var as $key => $el) { 
    if (is_array($el)) { 
     $keys[] = $key; 
    } 
    } 
    return $keys; 
} 

Demo.

+0

Да, я пробовал то же самое, но таким образом я получу 'Предупреждение: Недействительный аргумент, предоставленный для foreach() ', потому что это неправильный формат для массива. Я знаю, что могу просто проигнорировать это с помощью '@', но есть ли какой-нибудь другой способ? –

+0

Обратите внимание, что 'array' typehint в параметре функции. Если вы не уверены, является ли массив '$ test_var' массивом, вы должны проверить его также (с' is_array'), но это, вероятно, означает, что в вашем коде что-то еще не так. – raina77ow

+0

Спасибо, я нашел проблему в своем коде. Проблема заключалась в том, что я набрал неправильные элементы в массиве. Спасибо за ответ, я очень устал, что проверял его несколько раз и не видел ошибки. –

0

Вы можете использовать Еогеасп, поскольку вы ищете любой массив:

foreach ($a as $key => $test) { 
    if (is_array($test)) { 
     $keys[] = $key; 
    } 
} 

Все ключи массивов для массива $a будет в массиве $keys.

0
$array = array(1 => 5, 2 => 3, 3 => 13, 9 => array('test'), 4 => 32, 5 => 33); 
foreach($array as $key => $value){ 
    if(is_Array($value)){ 
     echo $value[key($value)]; 
    } 
} 
0

Я пробовал по-разному.

$a = array(1 => 5, 2 => 3, 3 => 13, 9 => array('test'), 4 => 32, 5 => 33); 

foreach ($a as $aas ): 

     if(is_array($aas)){ 
      foreach ($aas as $key => $value): 
       echo " (child array is this $key : $value)"; 
     endforeach; 
     }else{ 
       echo " Value of array a = $aas : "; 


     } 
    endforeach; 

выход как:

Value of array a = 5 : Value of array a = 3 : 
Value of array a = 13 : (child array is this 0 : 
test) Value of array a = 32 : Value of array a = 33 : 
Смежные вопросы