PHP Array重新排列数字键作为父母键

时间:2019-01-02 19:55:39

标签: php arrays multidimensional-array

我想重新排列一个简单的多维数组。

Array
    (
        [pieces] => Array
            (
                [0] => 2
                [1] => 9
            )
        [start] => Array
            (
                [0] => 0001
                [1] => 9901
            )
        [end] => Array
            (
                [0] => 0002
                [1] => 9909
            )
        [group] => Array
            (
                [0] => 0001-0100
                [1] => 9901-9999
            )
    )

Array
(
    [tokens] => Array
        (
            [0] =>  Array
                (
                    [start] => 0001
                    [end] => 0002
                    [pieces] => 2
                    [group] => 0100
                )
            [1] =>  Array
                (
                    [start] => 9901
                    [end] => 9909
                    [pieces] => 9
                    [group] => 9901-9999
                )
        )
)

我已经尝试过类似的操作:

$keys = array_keys($array);
foreach ($keys as $key => $val) {       
    foreach ($array as $k => $v){
        foreach($array[$v] as $tk => $tv){
            if($val == $k){
                $new['tokens'][][$val] = $tv;
            }
        }
    }
}

数字是我从表单中获得的一组令牌,

请谁能解释我做错了什么? 我用不同的代码工作了几个小时(我知道解决方案很简单),但我有点困惑:/

非常感谢您!

BR KK

1 个答案:

答案 0 :(得分:3)

第四只鸟的解决方案很严格,因为它:

  • 在循环条件中需要一个显式定义的键。
  • 强制整个结果中的项不超过一个键。
  • 假定并强制输入键是顺序的且索引为零。

无论如何,以下内容都将起作用:

foreach( $array as $y => $inner ) {
    foreach( $inner as $x => $value ) {
        $new['tokens'][$x][$y] = $value;
    }
}

演示:https://3v4l.org/Rmdtd


编辑:我认为有必要保留他的已删除答案中发布的代码对第四只鸟的麻烦的解释:

  

您正在尝试索引$array[$v],但在$v的情况下是一个   子数组。根据{{​​3}}:

     

数组和对象不能用作键。这样做会导致   警告:偏移量类型非法

在开发代码时,请确保将array docs调高到E_ALL,以便可以看到指示当前和/或将来问题的非关键消息。