我需要访问一个看起来像这样的数组。
Array
(
[0] => Array
(
[54] => Array
(
[test] => 54
[tester] => result
)
)
)
foreach($array as $key=>$value)
{
echo $key;// prints 0
echo $value;// prints Array
/*
now i can iterate through $value but i dont want it solve that way example:
foreach($value as $k=>$v)
{
echo $k;//prints test
echo $v; //prints 54
}
*/
}
如何只迭代一次?获取测试和测试人员的值? 我希望我能解释清楚问题
答案 0 :(得分:4)
使用SPL的RecursiveDirectoryIterator
$iterator = new RecursiveIteratorIterator(
new RecursiveArrayIterator($array),
RecursiveIteratorIterator::SELF_FIRST);
foreach($iterator as $key => $val) {
if($key === 'test' || $key === 'tester') {
echo "$key = $val \n";
}
}
这将找到值为 test 或 tester 的所有数组元素,无论它在多维数组中出现在何处。如果必须将其缩小到数组中的特定深度,则可以匹配$iterator->getDepth()
。
您还可以将if条件放入FilterIterator的accept()方法的方法体中,例如
class TestFilter extends FilterIterator
{
public function accept()
{
return ($this->key() === 'test' || $this->key() === 'tester');
}
}
然后在foreach
之前将迭代器包装在其中,例如
$iterator = new TestFilter($iterator); // wrap iterator from first example
foreach($iterator as $key => $val) {
echo "$key = $val \n";
}
进一步阅读:
答案 1 :(得分:1)
您可以使用匿名函数列出项目。每次遇到数组作为元素时,这将使用递归:
array_walk_recursive($array, create_function('$item, $key',
'echo "$key => $item<br />";'
));
或者在使用PHP 5.3时:
array_walk_recursive($array, function($item, $key) {
echo "$key => $item<br />";
});
这比create_function()更快(也更可读)。但是,此构造仅在PHP 5.3及更高版本中可用。
两者都会输出:
test => 54
tester => result
我相信这正是你想要的。
答案 2 :(得分:0)
这只适用于此特定数组:
foreach($array[0][54] as $key=>$value)
{
echo $key;// prints test and tester
echo $value;// prints 54 and result
}