PHP将数组更改为一维
生成数组格式的函数:PHP将数组更改为一维,php,arrays,Php,Arrays,生成数组格式的函数: function buildTree(array $elements, $parentId = 0) { $branch = array(); foreach ($elements as $element) { if ($element['parent_id'] == $parentId) { $children = buildTree($elements, $element['id']);
function buildTree(array $elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = buildTree($elements, $element['id']);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
$tree = buildTree($rows);
Array
(
[0] => Array
(
[TASK_ID] => 2
[PARENT_TASKID] => 0
[TASK_LEVEL] => 0
[children] => Array
(
[0] => Array
(
[TASK_ID] => 9
[PARENT_TASKID] => 2
[TASK_LEVEL] => 1
)
[1] => Array
(
[TASK_ID] => 10
[PARENT_TASKID] => 2
[TASK_LEVEL] => 1
)
)
)
[1] => Array
(
[TASK_ID] => 1
[PARENT_TASKID] => 0
[TASK_LEVEL] => 0
[children] => Array
(
[0] => Array
(
[TASK_ID] => 4
[PARENT_TASKID] => 1
[TASK_LEVEL] => 1
)
[1] => Array
(
[TASK_ID] => 5
[PARENT_TASKID] => 1
[TASK_LEVEL] => 1
[children] => Array
(
[0] => Array
(
[TASK_ID] => 6
[PARENT_TASKID] => 5
[TASK_LEVEL] => 2
)
)
)
)
)
)
生成的数组:
function buildTree(array $elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = buildTree($elements, $element['id']);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
$tree = buildTree($rows);
Array
(
[0] => Array
(
[TASK_ID] => 2
[PARENT_TASKID] => 0
[TASK_LEVEL] => 0
[children] => Array
(
[0] => Array
(
[TASK_ID] => 9
[PARENT_TASKID] => 2
[TASK_LEVEL] => 1
)
[1] => Array
(
[TASK_ID] => 10
[PARENT_TASKID] => 2
[TASK_LEVEL] => 1
)
)
)
[1] => Array
(
[TASK_ID] => 1
[PARENT_TASKID] => 0
[TASK_LEVEL] => 0
[children] => Array
(
[0] => Array
(
[TASK_ID] => 4
[PARENT_TASKID] => 1
[TASK_LEVEL] => 1
)
[1] => Array
(
[TASK_ID] => 5
[PARENT_TASKID] => 1
[TASK_LEVEL] => 1
[children] => Array
(
[0] => Array
(
[TASK_ID] => 6
[PARENT_TASKID] => 5
[TASK_LEVEL] => 2
)
)
)
)
)
)
如何将上述格式更改为以下格式:
Array
(
[0] => Array
(
[TASK_ID] => 2
[PARENT_TASKID] => 0
)
[1] => Array
(
[TASK_ID] => 9
[PARENT_TASKID] => 2
)
[2] => Array
(
[TASK_ID] => 10
[PARENT_TASKID] => 2
)
)
请输入以下代码:
$flat = call_user_func_array('array_merge', $array);
及
$array=您的阵列
$result=call_user_func_数组('array_merge',$array);
回声“;
打印(结果);
但似乎不起作用。请帮忙
谢谢。
<?php
echo '<pre>';
print_r($arr);
echo '</pre>';
?>
尝试输出:
function multi_array($array)
{
$new = array();
foreach($array as $key=>$elem)
{
if(is_array($elem))
{
foreach($elem as $x=>$val)
{
if(!is_array($val))
{
$new[$x][$key] = $val;
}
}
}
}
return $new;
}
希望,它对您有用。在捕获多个文件时,我一直在使用它解析$\u文件
function makeOneDimensionArray(array $array, &$res = array())
{
foreach($array as $arr)
{
$res[] = array(
'TASK_ID' => $arr['TASK_ID'],
'PARENT_TASKID' => $arr['PARENT_TASKID']
);
if(isset($arr['children']))
{
makeOneDimensionArray($arr['children'], $res);
}
}
return $res;
}
$finalArr = makeOneDimensionArray($array);
print_r($finalArr);
用法非常基本
function flattenTree($tree)
{
$flat = array();
foreach ($tree as $item) {
if (array_key_exists('children', $item)) {
$children = $item['children'];
unset($item['children']);
$flat[] = $item;
$flat = array_merge($flat, flattenTree($children));
} else {
$flat[] = $item;
}
}
return $flat;
}
$flat = flattenTree($tree);
我希望它有助于尝试以下代码:
我希望它能有所帮助。您应该使用递归函数来展平树,就像您使用递归函数来构建树一样
你自己尝试过什么吗?你是如何生成数组的?您必须向我们提供更多信息以帮助您。还有你自己尝试过什么?请查看有问题的更新尝试这个为什么不投票?必须有向下投票的原因。输出->
Array([0]=>Array([TASK\u ID]=>2)[1]=>Array([PARENT\u TASK ID]=>0))
添加阵列的var\u dump,以便我可以运行。预期或现有阵列的var\u dump
?输出与预期不符。代码与预期接近。但我怀疑是否有两个任务的父任务ID=0将首先排序,然后再排序子任务。请查看问题中生成的数组。@slimshaddyyy:只需将array\u merge语句放入foreach循环中即可。查看我的编辑。输出是相同的,即使它是内部foreach。请看我的问题和生成的数组。它有两条父任务ID为0的记录。
function flattenTree($tree)
{
$flat = array();
foreach ($tree as $item) {
if (array_key_exists('children', $item)) {
$children = $item['children'];
unset($item['children']);
$flat[] = $item;
$flat = array_merge($flat, flattenTree($children));
} else {
$flat[] = $item;
}
}
return $flat;
}
$flat = flattenTree($tree);