PHP的关键

PHP的关键

问题描述:

得到阵列子阵我的下一个层次阵列:PHP的关键

Array(
[1005] => Array(
       [1000] => Array(
           [1101] => ... 
           [1111] => ... 
          ) 
       ) 
) 

在我的功能我送$标识。我的任务是通过这个Id返回一个数组。 例如:getArray(1000)应该返回下一个数组:

Array(
            [1101] => ... 
            [1111] => ... 
           ) 

我如何做呢?谢谢。

+0

Medoo? http://stackoverflow.com/questions/3776798/php-array-recursion – Wernight 2010-09-23 09:52:03

+0

这是下一个任务。 – pltvs 2010-09-23 09:54:09

+0

然后问题应该标记为'任务'或'行使'或书面表明它不是个人问题,而​​是行为。 – Wernight 2010-09-23 12:04:37

这里是一个递归实现的getArray

function getArray($array, $index) { 
    if (!is_array($array)) return null; 
    if (isset($array[$index])) return $array[$index]; 
    foreach ($array as $item) { 
     $return = getArray($item, $index); 
     if (!is_null($return)) { 
      return $return; 
     } 
    } 
    return null; 
} 

这里是一个迭代实现的getArray

function getArray($array, $index) { 
    $queue = array($array); 
    while (($item = array_shift($queue)) !== null) { 
     if (!is_array($item)) continue; 
     if (isset($item[$index])) return $item[$index]; 
     $queue = array_merge($queue, $item); 
    } 
    return null; 
} 
+0

+1打我的迭代方法 – 2010-09-23 10:07:46

而且回答使用了recursive iterator

function getArray($array, $index) { 
    $arrayIt = new RecursiveArrayIterator($array); 
    $it = new RecursiveIteratorIterator(
     $arrayIt, 
     RecursiveIteratorIterator::SELF_FIRST 
    ); 
    foreach ($it as $key => $value) { 
     if ($key == $index) { 
      return $value; 
     } 
    } 
    return null; 
} 

或者,如果你真的想要得到幻想,那么你就是d使用filter iterator

class IndexFilterIterator extends FilterIterator { 
    protected $index = ''; 
    public function __construct($iterator, $index) { 
     $this->index = $index; 
     parent::__construct($iterator); 
    } 
    public function accept() { 
     return parent::key() == $index; 
    } 
} 

function getArray($array, $index) { 
    $arrayIt = new RecursiveArrayIterator($array); 
    $it = new RecursiveIteratorIterator(
     $arrayIt, 
     RecursiveIteratorIterator::SELF_FIRST 
    ); 
    $filterIt = new IndexFilterIterator($it, $index); 
    $filterIt->rewind(); 
    if ($filterIt->valid()) { 
     return $filterIt->current(); 
    } 
    return null; 
} 
+0

感谢它为我工作:) – 2013-08-18 16:43:02