如何在php上实现数组从单数组到多维数组的转换

如何在php上实现数组从单数组到多维数组的转换,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个excel文件中的数组,如下所示 $array=[ [‘父项1’、‘10000’、‘20000’], ['parent 1'、'15000'、'21000'], [‘家长2’、‘13000’、‘22000’], [‘父项2’、‘11000’、‘5000’], ]; 如何使用php将上面的数组转换为下面这样的数组 $array=[ '父1'=>[ ['10000', '20000'], ['15000', '21000'] ], “父2”=>[ ['13000', '22000'], [

我有一个excel文件中的数组,如下所示

$array=[
[‘父项1’、‘10000’、‘20000’],
['parent 1'、'15000'、'21000'],
[‘家长2’、‘13000’、‘22000’],
[‘父项2’、‘11000’、‘5000’],
];
如何使用php将上面的数组转换为下面这样的数组

$array=[
'父1'=>[
['10000', '20000'],
['15000', '21000']
],
“父2”=>[
['13000', '22000'],
['11000', '5000']
]
];

您需要在数组中循环,使第一个值作为键,其余值作为键

第1版

$result = [];
foreach ($arr as $k => $v) {
    $result[$v[0]][] = [ // making first value as key and reset its values
        $v[1], $v[2],
    ];
}
print_r($result);

编辑

    Array
(
    [parent 1] => Array
        (
            [0] => Array
                (
                    [0] => 10000
                    [1] => 20000
                )

            [1] => Array
                (
                    [0] => 15000
                    [1] => 21000
                )

        )

    [parent 2] => Array
        (
            [0] => Array
                (
                    [0] => 13000
                    [1] => 22000
                )

            [1] => Array
                (
                    [0] => 11000
                    [1] => 5000
                )

        )

)
第2版

$result = [];
foreach ($arr as $k => $v) {
    $result[array_shift($v)][] = $v;
}
print_r($result);
输出

Array
(
    [parent 1] => Array
        (
            [0] => Array
                (
                    [0] => 10000
                    [1] => 20000
                )

            [1] => Array
                (
                    [0] => 15000
                    [1] => 21000
                )

        )

    [parent 2] => Array
        (
            [0] => Array
                (
                    [0] => 13000
                    [1] => 22000
                )

            [1] => Array
                (
                    [0] => 11000
                    [1] => 5000
                )

        )

)

试试这个简单而精确的解决方案

$array = [
   ['parent 1', '10000', '20000'],
   ['parent 1', '15000', '21000'],
   ['parent 2', '13000', '22000'],
   ['parent 2', '11000', '5000'],
 ];

$output = [];
foreach ($array as $key => $value) {
    $output[$value[0]][] = array($value[1],$value[2]);
}
print_r($output);
parent 1
parent 2
位于
0
索引上,其他实体位于
1
2
索引上。每次迭代时,我都将
1
2
索引值分配给新数组中的
0
索引

输出

    Array
(
    [parent 1] => Array
        (
            [0] => Array
                (
                    [0] => 10000
                    [1] => 20000
                )

            [1] => Array
                (
                    [0] => 15000
                    [1] => 21000
                )

        )

    [parent 2] => Array
        (
            [0] => Array
                (
                    [0] => 13000
                    [1] => 22000
                )

            [1] => Array
                (
                    [0] => 11000
                    [1] => 5000
                )

        )

)
这是一个解决方案:

演示:

$array=[
[‘父项1’、‘10000’、‘20000’],
['parent 1'、'15000'、'21000'],
[‘家长2’、‘13000’、‘22000’],
[‘父项2’、‘11000’、‘5000’],
];
$new_array=array();
foreach($a数组){
$temp=阵列×片($a,1);
如果(!array_key_存在($a[0],$new_array)){
$new_数组[$a[0]]=array();
}
数组推送($new_数组[$a[0]],$temp);
}
打印(新阵列)
输出:

Array
(
[parent 1] => Array
    (
        [0] => Array
            (
                [0] => 10000
                [1] => 20000
            )

        [1] => Array
            (
                [0] => 15000
                [1] => 21000
            )

    )

[parent 2] => Array
    (
        [0] => Array
            (
                [0] => 13000
                [1] => 22000
            )

        [1] => Array
            (
                [0] => 11000
                [1] => 5000
            )

    )

)

做或不做。没有“尝试”。一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了SO的未来访客。@JayBlanchard对此表示抱歉!我已经更新了我的答案。你的更新没有解释你做了什么。想象一下,你必须教一个新的程序员做什么。你会告诉他/她什么?做还是不做。没有“尝试”。一个好的答案总是会有一个解释,说明做了什么,为什么这样做,不仅是为了OP,而且是为了未来的访客。这怎么错呢?你能再解释一下吗。非常感谢OP想要的预期阵列。你会得到它,否则,与我的输出进行比较,检查你是否得到你的缺陷。但若你们的答案和我的一样,你们的答案将毫无价值;)@是的,你是对的。我现在已经更新了我的答案,不管是做还是不做。没有“尝试”。一个好的答案总是会有一个解释,说明做了什么,以及为什么这样做,不仅是为了OP,而且是为了SO的未来访客。对不起,伙计!我会从下次开始处理的。更新我的答案!我建议使用
$result[array\u shift($v)][]=$v
这是一般的做法是的,我心里有
array\u shift
,但无法按我想要的方式塑造。谢谢汉克的伙伴,这就是我要找的:)。