2015-11-03 4 views
-2

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

$testArray = array (
    'subArray1' => array(
     'key1' => "Sub array 1 value 1", 
     'key2' => "Sub array 1 value 2", 
     'key3' => array(
      'subkey1' => array(
       'subsubkey' => 'sub sub sub value', 
      ), 
     ), 
    ), 
    'subArray2' => array(
     'key1' => "Sub array 2 value 1", 
     'key2' => "Sub array 2 value 2", 
     'key3' => array(
      'subkey1' => array(
       'subsubkey' => 'sub sub sub value 2', 
      ), 
     ), 
    ), 
); 




function recursiveSearch($testArray,$key,$results) 
{ 
    // var_dump($testArray); 
    if(is_array($testArray)){ 
     foreach($testArray as $k => $v){ 
      if($k == $key){ 
       return $v; 
      } 
      else if(is_array($v)){ 
       array_push($results, recursiveSearch($v,$key,$results)); 
      } 
     } 
    } 
    else{ 
     return ; 
    } 
    return $results; 
} 

$empt = array(); 

$output = recursiveSearch($testArray,'subsubkey',$empt); 


var_dump($output); 

Этот вывод я на данный момент ... Я хочу, чтобы получить простую массив со значениями в нем.

array(2) { 
    [0]=> 
    array(1) { 
    [0]=> 
    array(1) { 
     [0]=> 
     string(17) "sub sub sub value" 
    } 
    } 
    [1]=> 
    array(2) { 
    [0]=> 
    array(1) { 
     [0]=> 
     array(1) { 
     [0]=> 
     string(17) "sub sub sub value" 
     } 
    } 
    [1]=> 
    array(2) { 
     [0]=> 
     array(1) { 
     [0]=> 
     array(1) { 
      [0]=> 
      string(17) "sub sub sub value" 
     } 
     } 
     [1]=> 
     string(19) "sub sub sub value 2" 
    } 
    } 
} 

Я не совсем уверен, почему массив результат, как это ...

Формат результирующего массива, что я хочу это:

['sub sub sub value','sub sub sub value 2']

+0

Я вижу «Я хочу ", но не вопрос. У вас уже есть код, что вы пытались его изменить, и как вы думаете, что нужно улучшить? – kero

ответ

1

Улучшенная версия xPheRe

/** 
* Recursive find in the given $array and $needle. 
* @param $array The input array. 
* @param $needle The needle to find. 
* @return Returns all the values find by the given key. 
*/ 
function recursiveFind(array $array, $needle) 
{ 
    $iterator = new RecursiveArrayIterator($array); 
    $recursive = new RecursiveIteratorIterator($iterator, 
         RecursiveIteratorIterator::SELF_FIRST); 
    $results = array(); 
    foreach ($recursive as $key => $value) { 
     if ($key === $needle) { 
      array_push($results, $value); 
     } 
    } 
    return $results; 
} 

Использование

$output = recursiveFind($testArray, 'subsubkey'); 
var_dump($output); 

Выход

array(2) { 
    [0]=> 
    string(17) "sub sub sub value" 
    [1]=> 
    string(19) "sub sub sub value 2" 
} 
0

Обновленная функция моей версии выглядит следующим образом:

function recursiveSearch($testArray,$key){ 
    $empt = array(); 
    function recurSearch($testArray,$key,$results) 
    { 
     if(is_array($testArray)){ 
      foreach($testArray as $k => $v){ 
       if($k === $key){ 
        array_push($results,$v); 
       } 
       else if(is_array($v)){ 
        $temp = array(); 
        $tempres = recurSearch($v,$key,$temp); 
        $results = array_merge($results,$tempres); 
       } 
      } 
     } 
     return $results; 
    } 
    $res = recurSearch($testArray,$key,$empt); 
    return $res; 
} 

, кажется, работает:)

Смежные вопросы