2010-10-05 25 views
2

我有此数组:数组到一个更高的水平

[@attributes] => Array 
       (
        [url] => 
        [navigation] => true 
        [template] => home 
       ) 

      [@children] => Array 
       (
        [0] => Array 
         (
          [name] => Home 
         ) 

        [1] => Array 
         (
          [desc] => Lorem ipsum dolor 
         ) 

        [2] => Array 
         (
          [@children] => Array...... 

我需要它,而不是是这样的:

[@attributes] => Array 
       (
        [url] => 
        [navigation] => true 
        [template] => home 
       ) 

      [@children] => Array 
       (
         [name] => Home 
         [desc] => Lorem ipsum dolor 
         [@children] => Array...... 

我不能改变这个数组实际上是正在修建遗憾的是这样的方式我需要基本摆脱每个项目在他们自己的阵列中,他们都应该嵌套在儿童之下。

预先感谢

通过孩子

回答

4

可以使用call_user_func_arrayarray_merge做到这一点:

$arr['@children'] = call_user_func_array('array_merge', $arr['@children']); 

这将调用array_merge$arr['@children']的数组作为参数。

2

首先循环,在一个新的阵列中存储的每个值,然后将其覆盖:

$newChildren = array(); 
foreach ($arr['@attributes']['@children'] as $property) { 
    foreach ($property as $key => $val) { 
    $newChildren[$key] = $val; 
    } 
} 
$arr['@attributes']['@children'] = $newChildren; 

如果这些值是嵌套深度超过一个级别(I看到另一个@儿童键/数组),你可以把它放在一个函数中并递归调用它。

0

尝试一些沿线的...

foreach (@attributes[@children] as $arrayVal) 
{ 
    foreach($arrayVal as $key=>$val) 
     @mySimpleArray[] = $val 

}