2015-05-26 2 views
0

В настоящее время я изучаю Php. Я видел различные типы массивов (многомерные), но я никогда не видел никого, что ниже, полученный из результата ldap_search.php Как получить значение ключа из этого странного размерного массива

Вот результат ldap_search массив:

Array(
    [count] => 1[0] => Array(
     [objectclass] => Array(
      [count] => 2[0] => sudorole[1] => top 
     ) [0] => objectclass[sudohost] => Array(
      [count] => 1[0] => abcd 
     ) [1] => sudohost[sudocommand] => Array(
      [count] => 1[0] => ALL 
     ) [2] => sudocommand[description] => Array(
      [count] => 1[0] => defg 
     ) [3] => description[sudooption] => Array(
      [count] => 1[0] => !authenticate 
     ) [4] => sudooption[sudouser] => Array(
      [count] => 5[0] => john[1] => james[2] => william[3] => robo[4] => chris 
     ) [5] => sudouser[cn] => Array(
      [count] => 1[0] => ffffff 
     ) [6] => cn[count] => 7[dn] => cn = bbbbb,ou = test,dc = myproj,  dc = com 
    ) 
) 

На самом деле моя задача состоит в том, чтобы Findout 'dn' значение из массива выше.

Я могу получить значение определенного ключа из обычного многомерного массива с использованием некоторой рекурсивной функции. Но как получить значение ключа из массива выше. Используя какую-то рекурсивную функцию? Извините, если его немой вопрос, но я действительно не понимаю, как это сделать.

Кстати, я попытался с помощью кода ниже, но чувствовал, какая-то логика не является правильным для моего массива

<?php 
// Find the value of a Key 
function seekKey($haystack, $needle){ 
    foreach($haystack as $key => $value){ 
    if($key == $needle){ 
     $output = $value; 
    }elseif(is_array($value)){ 
     $output = seekKey($value, $needle); 
    } 
    } 
    return $output; 
} 
?> 
+0

Где мой код? –

+0

@ b0s3 i обновленный выше в моем сообщении – user3815806

ответ

1

Вот рекурсивная функция, которая делает то, что вы хотите.

searchKey вернет true, если оно что-то обнаружит. Таким образом, вы можете проверить, удалось ли это выполнить, прежде чем манипулировать результатом.

Результат будет сохранен в третьем аргументе функции.

<?php 
function searchKey($key, $array, &$result = null) 
{ 
    if (is_array($array)) 
    { 
     foreach ($array as $k => $arr) 
     { 
      if ($k == $key) 
      { 
       $result = $arr; 
       return true; 
      } 
      else if (searchKey($key, $arr, $result)) // recursion 
       return true; 
     } 
    } 
    else 
     return; 
} 

$array = [ 
    'count' => 1, 
    0 => [ 
     'test' => [0, 1], 
     't' => 4 
    ] 
]; 

// searchKey will return true if it found it 
// $result will contain what it found 
var_dump(searchKey('test', $array, $result)); 
var_dump($result); 
+0

Я могу сделать выше, используя вложенные foreach, но Iam ищет решение, используя некоторую рекурсивную функцию., Как и мой рекурсивный пример выше – user3815806

+0

Это рекурсивный ('else if (searchKey ($ key , $ arr, $ result)) ') –