我有一个来自数据库的数组,其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
我不能写功能来做到这一点。
答案 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循环。