从parent_id-array生成路径数组

时间:2013-04-22 14:55:00

标签: php arrays

我有一个来自数据库的数组,其id-parent_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

我不能写功能来做到这一点。

2 个答案:

答案 0 :(得分:1)

试试这个。

$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;
}

答案 1 :(得分:0)

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"];
}

P.s。:您也可以迭代地执行此操作。在foreach循环中使用while循环。