Php 从父\u id-array生成路径数组
我从数据库中获得了一个id-parent\u id值为的数组:Php 从父\u id-array生成路径数组,php,arrays,Php,Arrays,我从数据库中获得了一个id-parent\u id值为的数组: [0] => Array ( [id] => 45 [parent_id] => [name] => 1 ) [2] => Array ( [id] => 152 [parent_id] => 45 [name] => 2 ) [3] => Array ( [id]
[0] => Array
(
[id] => 45
[parent_id] =>
[name] => 1
)
[2] => Array
(
[id] => 152
[parent_id] => 45
[name] => 2
)
[3] => Array
(
[id] => 153
[parent_id] => 152
[name] => 3
)
我需要得到一个带有路径的数组
[0] => 1
[2] => 1/2
[3] => 1/2/3
我无法编写函数来执行此操作 试试这个
$i = 0;
foreach ($arrays as $array){
$newArray[] = empty($array['parent_id']) ? $array['name'] : $newArray[$i-1] . '/'. getParent($arrays, $array['parent_id']);
$i++;
}
print'<pre>';print_r($newArray);print'</pre>';
function getParent($arr, $parent){
foreach($arr as $k => $v){
if(isset($v['parent_id']) && $v['parent_id'] == $parent) return $v['name'];
}
return false;
}
$i=0;
foreach($array作为$array){
$newArray[]=empty($array['parent_id'])?$array['name']:$newArray[$i-1]./'.getParent($arrays,$array['parent_id']);
$i++;
}
打印“”;打印(新数组);打印“”;
函数getParent($arr,$parent){
foreach($arr为$k=>$v){
if(isset($v['parent\u id'])和&$v['parent\u id']==$parent)返回$v['name'];
}
返回false;
}
附言:你也可以迭代地这样做。foreach循环中有一个while循环。请显示您到目前为止尝试了什么。您的预期输出对我来说毫无意义。(刚刚有了你提供的信息)你能解释一下吗?不使用下一个键我得到了这个:数组([0]=>1[1]=>1/asdas[2]=>1/asdas/asdas[3]=>1/asdas/asdas/asdas[4]=>1/asdas/asdas/4[5]=>1/asdas/asdas/4/asdas[6]=>1/asdas/asdas/4/2[7]=>1/asdas/asdas/asdas/4/asdas/2/3[8]=>1/asdas/asdas/4/asdas/2/3/asdas[9]=>1/asdas/asdas/asdas/4/asdas/2/3/asdas/asdas)所讨论的数组包含一个[name]键,似乎总是包含一个整数。(递增)所需的输出似乎是来自此名称键的一系列值。数组([0]=>1[1]=>asdas/asdas[2]=>asdas[3]=>asdas/asdas/asdas[4]=>4/3/2/1[5]=>asdas/asdas[6]=>2/1[7]=>3/2/1[8]=>asdas/asdas[9]=>asdas]@user2307848刚刚更改了顺序。现在好多了?
function getArrayRecursive ($array, $pid) {
$id = NULL;
array_walk($array, function ($subarray, $key) use (&$id, $pid) { if ($subarray["id"] == $pid) $id = $key; });
return is_null($id)?"":getArrayRecursive($array, $array[$id]["parent_id"]).$array[$id]["name"]."/";
}
$newArray = array();
foreach ($array as $key => $subarray) {
$newArray[$key] = getArrayRecursive($array, $subarray["parent_id"]).$subarray["name"];
}