如何在php上实现数组从单数组到多维数组的转换
我有一个excel文件中的数组,如下所示如何在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'], [
$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
,但无法按我想要的方式塑造。谢谢汉克的伙伴,这就是我要找的:)。