Php 从值数组生成多维数组
我有一个数组,其中的键描述多维数组中的位置,如:Php 从值数组生成多维数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个数组,其中的键描述多维数组中的位置,如: array( '3728:baskets:4839:1' => 'apple', '3728:baskets:4839:2' => 'orange', '3728:baskets:4920:1' => 'cherry', '3728:baskets:4920:2' => 'apple', '9583:baskets:4729:1' =>
array(
'3728:baskets:4839:1' => 'apple',
'3728:baskets:4839:2' => 'orange',
'3728:baskets:4920:1' => 'cherry',
'3728:baskets:4920:2' => 'apple',
'9583:baskets:4729:1' => 'pear',
'9583:baskets:4729:2' => 'orange',
'9583:baskets:6827:1' => 'banana',
'9583:baskets:6827:2' => 'pineapple',
);
我想将此数组传递给一个函数,该函数根据由“:”分隔的键中的片段生成多维数组。生成的数组应如下所示:
array(
3728 => array(
'baskets' => array(
4839 => array(
1 => 'apple',
2 => 'orange',
),
4920 => array(
1 => 'cherry',
2 => 'apple',
),
),
),
9583 => array(
'baskets' => array(
4729 => array(
1 => 'pear',
2 => 'orange',
),
6827 => array(
1 => 'banana',
2 => 'pineapple',
),
),
),
);
有什么想法吗?函数数组\u createmulti($arr){
function array_createmulti($arr) {
// The new multidimensional array we will return
$result = array();
// Process each item of the input array
foreach ($arr as $key => $value) {
// Store a reference to the root of the array
$current = &$result;
// Split up the current item's key into its pieces
$pieces = explode(':', $key);
// For all but the last piece of the key, create a new sub-array (if
// necessary), and update the $current variable to a reference of that
// sub-array
for ($i = 0; $i < count($pieces) - 1; $i++) {
$step = $pieces[$i];
if (!isset($current[$step])) {
$current[$step] = array();
}
$current = &$current[$step];
}
// Add the current value into the final nested sub-array
$current[$pieces[$i]] = $value;
}
// Return the result array
return $result;
}
//我们将返回新的多维数组
$result=array();
//处理输入数组的每个项
foreach($arr作为$key=>$value){
//存储对数组根的引用
$current=&$result;
//将当前项的键拆分为多个部分
$pieces=分解(“:”,$key);
//对于除最后一个关键帧以外的所有关键帧,创建一个新的子数组(如果
//必要时),并将$current变量更新为该变量的引用
//子阵列
对于($i=0;$i
函数数组\u createmulti($arr){
//我们将返回新的多维数组
$result=array();
//处理输入数组的每个项
foreach($arr作为$key=>$value){
//存储对数组根的引用
$current=&$result;
//将当前项的键拆分为多个部分
$pieces=分解(“:”,$key);
//对于除最后一个关键帧以外的所有关键帧,创建一个新的子数组(如果
//必要时),并将$current变量更新为该变量的引用
//子阵列
对于($i=0;$i
函数数组\u createmulti($arr){
//我们将返回新的多维数组
$result=array();
//处理输入数组的每个项
foreach($arr作为$key=>$value){
//存储对数组根的引用
$current=&$result;
//将当前项的键拆分为多个部分
$pieces=分解(“:”,$key);
//对于除最后一个关键帧以外的所有关键帧,创建一个新的子数组(如果
//必要时),并将$current变量更新为该变量的引用
//子阵列
对于($i=0;$i
函数数组\u createmulti($arr){
//我们将返回新的多维数组
$result=array();
//处理输入数组的每个项
foreach($arr作为$key=>$value){
//存储对数组根的引用
$current=&$result;
//将当前项的键拆分为多个部分
$pieces=分解(“:”,$key);
//对于除最后一个关键帧以外的所有关键帧,创建一个新的子数组(如果
//必要时),并将$current变量更新为该变量的引用
//子阵列
对于($i=0;$i
比前面的答案快:
function formatMyData($data)
{
$res = array();
foreach($data as $key => $value) {
list($a, $b, $c, $d) = explode(':', $key);
if (!isset($res[$a])) {
$res[$a] = array(
$b => array(
$c => array(
$d => $value
)
)
);
}
else if (!isset($res[$a][$b])) {
$res[$a][$b] = array(
$с => array(
$d => $value
)
);
}
else if (!isset($res[$a][$b][$c])) {
$res[$a][$b][$c] = array(
$d => $value
);
} else {
$res[$a][$b][$c][$d] = $value;
}
}
return $res;
}
这将比前面的答案更快:
function formatMyData($data)
{
$res = array();
foreach($data as $key => $value) {
list($a, $b, $c, $d) = explode(':', $key);
if (!isset($res[$a])) {
$res[$a] = array(
$b => array(
$c => array(
$d => $value
)
)
);
}
else if (!isset($res[$a][$b])) {
$res[$a][$b] = array(
$с => array(
$d => $value
)
);
}
else if (!isset($res[$a][$b][$c])) {
$res[$a][$b][$c] = array(
$d => $value
);
} else {
$res[$a][$b][$c][$d] = $value;
}
}
return $res;
}
这将比前面的答案更快:
function formatMyData($data)
{
$res = array();
foreach($data as $key => $value) {
list($a, $b, $c, $d) = explode(':', $key);
if (!isset($res[$a])) {
$res[$a] = array(
$b => array(
$c => array(
$d => $value
)
)
);
}
else if (!isset($res[$a][$b])) {
$res[$a][$b] = array(
$с => array(
$d => $value
)
);
}
else if (!isset($res[$a][$b][$c])) {
$res[$a][$b][$c] = array(
$d => $value
);
} else {
$res[$a][$b][$c][$d] = $value;
}
}
return $res;
}
这将比前面的答案更快:
function formatMyData($data)
{
$res = array();
foreach($data as $key => $value) {
list($a, $b, $c, $d) = explode(':', $key);
if (!isset($res[$a])) {
$res[$a] = array(
$b => array(
$c => array(
$d => $value
)
)
);
}
else if (!isset($res[$a][$b])) {
$res[$a][$b] = array(
$с => array(
$d => $value
)
);
}
else if (!isset($res[$a][$b][$c])) {
$res[$a][$b][$c] = array(
$d => $value
);
} else {
$res[$a][$b][$c][$d] = $value;
}
}
return $res;
}
在数组上循环,
explode()
在上的键:“
,将值放在正确的位置。在数组上循环,explode()
在上的键:”
,将值放在正确的位置。在数组上循环,explode()
在上的键:“
,将值放在正确的位置。在数组上循环,explode()。我建议添加一个小的解释来配合这个不错的回答:)太棒了!这真是太棒了!我认为通过引用传递数组将是解决方案的一部分,但它对我不起作用。我很高兴世界上有更聪明的人能帮我解决这个问题!谢谢对于初学者来说,引用的使用可能并不明显。我建议添加一个小的解释来配合这个不错的回答:)太棒了!这真是太棒了!我认为通过引用传递数组将是解决方案的一部分,但它对我不起作用。我很高兴世界上有更聪明的人能帮我解决这个问题!谢谢对于初学者来说,引用的使用可能并不明显。我建议添加一个小的解释来配合这个不错的回答:)太棒了!这真是太棒了!我认为通过引用传递数组将是解决方案的一部分,但它对我不起作用。我很高兴世界上有更聪明的人能帮我解决这个问题!谢谢引用的使用可能是非ob的