Php代码
代码如下
* $sourceArr 原来的数组
* $key 主键
* $parentKey 与主键关联的父主键
* $childrenKey 生成的孩子的键名
*
*/
function arrayToTree($sourceArr, $key, $parentKey, $childrenKey)
{
$tempSrcArr = array();
foreach ($sourceArr as $v)
{
$tempSrcArr[$v[$key]] = $v;
}
$i = 0;
$count = count($sourceArr);
for($i = ($count - 1); $i >=0; $i--)
{
if (isset($tempSrcArr[$sourceArr[$i][$parentKey]]))
{
$tArr = array_pop($tempSrcArr);
$tempSrcArr[$tArr[$parentKey]][$childrenKey] = (isset($tempSrcArr[$tArr[$parentKey]][$childrenKey]) && is_array($tempSrcArr[$tArr[$parentKey]][$childrenKey])) ? $tempSrcArr[$tArr[$parentKey]][$childrenKey] : array();
array_push ($tempSrcArr[$tArr[$parentKey]][$childrenKey], $tArr);
}
}
return $tempSrcArr;
}
Php代码
* 将数组转换成树
* 例子:将 array(
array('id'=>1,'parentId' => 0,'name'=> 'name1')
,array('id'=>2,'parentId' => 0,'name'=> 'name2')
,array('id'=>4,'parentId' => 1,'name'=> 'name1_4')
,array('id'=>15,'parentId' => 1,'name'=> 'name1_5')
);转换成
* Array(
[1] => Array([id] => 1
[parentId] => 0
[name] => name1
[children] => Array(
[0] => Array([id] => 15,[parentId] => 1,[name] => name1_5)
[1] => Array([id] => 4,[parentId] => 1,[name] => name1_4)
)
)
[2] => Array([id] => 2,[parentId] => 0,[name] => name2)
)
* @param array $sourceArr 要转换的数组
* @param string $key 数组中确认父子的key,例子中为“id”
* @param string $parentKey 数组中父key,例子中为“parentId”
* @param type $childrenKey 要在树节点上索引子节点的key,例子中为“children”
* @return array 返回生成的树
*/
代码如下
function arrayToTree($sourceArr, $key, $parentKey, $childrenKey)
{
$tempSrcArr = array();
$allRoot = TRUE;
foreach ($sourceArr as $v)
{
$isLeaf = TRUE;
foreach ($sourceArr as $cv )
{
if (($v[$key]) != $cv[$key])
{
if ($v[$key] == $cv[$parentKey])
{
$isLeaf = FALSE;
}
if ($v[$parentKey] == $cv[$key])
{
$allRoot = FALSE;
}
}
}
if ($isLeaf)
{
$leafArr[$v[$key]] = $v;
}
$tempSrcArr[$v[$key]] = $v;
}
if ($allRoot)
{
return $tempSrcArr;
}
else
{
unset($v, $cv, $sourceArr, $isLeaf);
foreach ($leafArr as $v)
{
if (isset($tempSrcArr[$v[$parentKey]]))
{
$tempSrcArr[$v[$parentKey]][$childrenKey] = (isset($tempSrcArr[$v[$parentKey]][$childrenKey]) && is_array($tempSrcArr[$v[$parentKey]][$childrenKey])) ? $tempSrcArr[$v[$parentKey]][$childrenKey] : array();
array_push ($tempSrcArr[$v[$parentKey]][$childrenKey], $v);
unset($tempSrcArr[$v[$key]]);
&nb