Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从父\u id-array生成路径数组_Php_Arrays - Fatal编程技术网

Php 从父\u id-array生成路径数组

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]

我从数据库中获得了一个id-parent\u 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"];
}