PHP的关键
问题描述:
得到阵列子阵我的下一个层次阵列:PHP的关键
Array(
[1005] => Array(
[1000] => Array(
[1101] => ...
[1111] => ...
)
)
)
在我的功能我送$标识。我的任务是通过这个Id返回一个数组。 例如:getArray(1000)
应该返回下一个数组:
Array(
[1101] => ...
[1111] => ...
)
我如何做呢?谢谢。
答
这里是一个递归实现的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
Medoo? http://stackoverflow.com/questions/3776798/php-array-recursion – Wernight 2010-09-23 09:52:03
这是下一个任务。 – pltvs 2010-09-23 09:54:09
然后问题应该标记为'任务'或'行使'或书面表明它不是个人问题,而是行为。 – Wernight 2010-09-23 12:04:37