2011-04-12 116 views
1

如果我有一个这样的数组:引用数组键而不知道名称?

$array = array('something'=>array('more'=>array('id'=> 34))); 

然后print_r($array['something']['more']['id']工作正常。

但是说键名可能会改变,但结构不会。我怎么能在不知道名字的情况下引用相同的值?

我想也许print_r($array[0][1][2]可能工作,但当然这些键不存在。

+1

使用的foreach:/ /php.net/manual/en/control-structures.foreach.php – kjy112 2011-04-12 13:51:08

回答

3

您可以使用foreach声明。使用递归函数来处理嵌套数组(未经测试):

public function iterateNestedArray($array) { 
    if (is_array($array)) { 
     foreach ($array as $key => $value) { 
      print_r(iterateNestedArray($value)); 
     } 
    } 
    else { 
     return $array; 
    } 
} 

你可能会考虑用第二个参数实现此功能通过一个回调函数,而不是仅仅print_r荷兰国际集团的每一个值。

-1

您可以使用reset()next()end()一如既往

$array = array('something'=>array('more'=>array('id'=> 34))); 
echo reset(reset(reset($array))); 
+1

-1此代码吐出E_STRICT错误。 'reset'接受一个引用,因此'reset(reset())'是无效的(引用必须是变量;表达式,比如函数调用,不被接受)。 – netcoder 2011-04-12 14:04:30

0

你可以用foreach直环,虽然它是相当难看:

foreach ($grandparent as $gpkey => $parent) { 
    foreach ($parent as $pkey => $child) { 
     foreach ($child as $ckey => $value) { 
      print $gpkey . " - " . $pkey . " - " . $ckey . " = " . $value; 
     } 
    } 
} 

或者你可以得到钥匙给array_keys()名单:对于联想arrray HTTP

$keys = array_keys($array); 
for ($i=0, $imax=count($keys); $i<$imax; $i++) { 
    print $key . " = " . $array[$key]; 
} 
相关问题