如果我有这样一个数组:
$array = array('something'=>array('more'=>array('id'=> 34)));
那么print_r($array['something']['more']['id']
工作良好。
但是假设键名可能会改变,但结构不会改变。我如何在不知道名称的情况下引用相同的值?
我想也许print_r($array[0][1][2]
可能工作,但当然这些键不存在。
可以使用foreach
语句。使用递归函数处理嵌套数组(未测试的):
public function iterateNestedArray($array) {
if (is_array($array)) {
foreach ($array as $key => $value) {
print_r(iterateNestedArray($value));
}
}
else {
return $array;
}
}
您可以考虑使用第二个参数来实现此函数,以传递回调函数,而不仅仅是print_r
每个值。
有多种可能性
可以使用arrayiterator或foreach。
您可以使用foreach实现一个直接循环,尽管它相当难看:
foreach ( $grandparent as $gpkey => $parent ) {
foreach ( $parent as $pkey => $child ) {
foreach ( $child as $ckey => $value ) {
print $gpkey . " - " . $pkey . " - " . $ckey . " = " . $value;
}
}
}
或者您可以使用array_keys()
:
$keys = array_keys($array);
for ( $i=0, $imax=count($keys); $i<$imax; $i++ ) {
print $key . " = " . $array[$key];
}
您可以一如既往地使用reset()
, next()
和end()
$array = array('something'=>array('more'=>array('id'=> 34)));
echo reset(reset(reset($array)));