php在多维数组中合并相同的键

时间:2013-09-06 04:58:35

标签: php arrays multidimensional-array

我有一个像下面这样的多维数组(图1)。我只想将所有等于父数组键的子数组键作为键值。

举个例子, 父密钥是23.并且23具有子密钥24.子密钥24具有子子密钥(25,26,27 ......),并且子子密钥可以具有另一个子密钥。所以我想要的是将所有子,子,子子...推送到父键23.参见图2.

如果有人能为此提出解决方案,我真的很感激。

非常感谢..

图1

Array ( [
  18] => Array ( 
    [1] =>
    [14] =>
  )
  [23] => Array ( 
    [24] =>
  ) 
  [24] => Array ( 
    [25] =>
    [26] =>
  )
 [26] => Array ( 
    [27] =>
    [28] =>
  )

)

图2

Array ( [
  18] => Array ( 
    [1] =>
    [14] =>
  ) 
  [23] => Array ( 
    [24] => Array ( 
       [25] =>
       [26] => Array ( 
          [27] =>
          [28] =>
       )
     )
  )
)

1 个答案:

答案 0 :(得分:0)

幸运的是,我没有在学校做一整天的活动

我从快速调试中留下了评论的回声

我的输出:

Array 
(
    [18] => Array
        (
        [1] =>
        [14] =>
        ) 
    [23] => Array
        ( 
        [24] => Array
            ( 
            [25] =>
            [26] => Array
                ( 
                [27] =>
                [28] =>
                )
            )
        )
)

<强>代码

<?php
function test ($scan, $where="array")
{
    global $array;
    global $position;
    //echo("\r\n New dimension: ".$where);

    foreach ($scan as $key => $value)
        {
            //echo("\r\n Scanning: ".$where."[".$key."]");
            if ( !isset($position[$key]) )
            {
                $position[$key] = $where."[".$key."]";
                //echo("\r\n Key position ".$key." set on: ".$position[$key]);
                //print("\r\n $position[$key]");
            }
            else
            {
                //echo("\r\n Key ".$key." is already set on position: ".$position[$key]);
                $old = ("\$".$where."[".$key."]");
                $cmd = ("\$".$position[$key]." = &".$old);
                //print("\r\n ".$cmd);
                eval("$cmd;");
                eval("unset ($old);");
            }
            if ( is_array($value) )
            {
                //echo("\r\n Enterring: ".$where."[".$key."]");
                test($value, $position[$key]);
                //echo("\r\n Enterring: ".$where);
            }
        }
    //echo("\r\n Exiting: ".$where);
}

print_r($array);
test($array);
print_r($array);
?>