我一直在寻找这个问题的解决方案,但没有真正成功。我有一个没有深度限制的父级和子级的多维数组。这是从数据库生成的,但问题是,使用我将平面数组排列为多维数组的方法,项ID成为键,如下所示:
Array(
[28] => Array
(
[id] => 28
[color] => #ff24e5
[name] => Personal
[parent_id] =>
[children] => Array
(
[23] => Array
(
[id] => 23
[color] => #41c3a3
[name] => Shopping
[parent_id] => 28
[children] => Array
(
[22] => Array
(
[id] => 22
[color] => #8be32b
[name] => Deals
[parent_id] => 23
[children] => Array
(
)
)
)
)
[150] => Array
(
[id] => 150
[color] => #e9a3f0
[name] => Orders
[parent_id] => 28
[children] => Array
(
)
)
)
)
)
我想要的是一个执行以下操作的函数:
Array (
[0] => Array
(
[id] => 28
[color] => #ff24e5
[name] => Personal
[parent_id] =>
[children] => Array
(
[0] => Array
(
[id] => 23
[color] => #41c3a3
[name] => Shopping
[parent_id] => 28
[children] => Array
(
[0] => Array
(
[id] => 22
[color] => #8be32b
[name] => Deals
[user_id] => 1
[selected] => 0
[parent_id] => 23
[children] => Array
(
)
)
)
)
[1] => Array
(
[id] => 150
[color] => #e9a3f0
[name] => Orders
[parent_id] => 28
[children] => Array
(
)
)
)
)
)
本质上是从0开始重新分配密钥。我尝试了许多方法,但我假设我需要找到一个递归解决方案,当我尝试时,它破坏了我的数组。我正在研读array_walk_recursive()函数,但我不知道除此之外还能做什么。从本质上讲,有没有办法重置多维数组中的数字键?
谢谢你的帮助!
发布于 2011-08-09 11:11:19
function fix_keys($array) {
foreach ($array as $k => $val) {
if (is_array($val))
$array[$k] = fix_keys($val); //recurse
}
return array_values($array);
}
发布于 2012-09-13 12:26:21
你真的需要添加is_numeric条件来阻止文本键混淆...
function fix_keys($array) {
foreach ($array as $k => $val) {
if (is_array($val))
$array[$k] = $fix_keys($val); //recurse
}
if( is_numeric($k) )
return array_values($array);
return $array;
}
相反,我这样做了:
function fix_keys($array) {
$numberCheck = false;
foreach ($array as $k => $val) {
if (is_array($val)) $array[$k] = fix_keys($val); //recurse
if (is_numeric($k)) $numberCheck = true;
}
if ($numberCheck === true) {
return array_values($array);
} else {
return $array;
}
}
发布于 2012-03-02 20:44:24
我也在尝试解决同样的问题,下面是代码
$array = array_values($array);
https://stackoverflow.com/questions/6990970
复制相似问题