【问题标题】:Re-structure array based on parent/child relationship基于父子关系重构数组
【发布时间】:2012-10-18 18:07:10
【问题描述】:

我有以下数组结构:

Array
(
    [0] => Array
        (
            [id] => 83
            [parent_id] => 0
            [title] => Questionnaire one
        )

    [1] => Array
        (
            [id] => 84
            [parent_id] => 0
            [title] => Questionnaire two
        )

    [2] => Array
        (
            [id] => 85
            [parent_id] => 83
            [title] => Questionnaire three
        )

)

我想重新构造数组,以便子项列在其父项下。例如:

Array
(
    [0] => Array
        (
            [id] => 83
            [parent_id] => 0
            [title] => Questionnaire one
        )

    [1] => Array
        (
            [id] => 85
            [parent_id] => 83
            [title] => Questionnaire three
        )

    [2] => Array
        (
            [id] => 84
            [parent_id] => 0
            [title] => Questionnaire two
        )
)

我搜索了以前的问题,但没有一个真正达到上述要求。

有人可以帮我解决这个问题吗?

谢谢

【问题讨论】:

  • 这是来自数据库吗?

标签: php arrays parent relationship


【解决方案1】:

你可以试试

$array = Array(
        "0" => Array("id" => 83,"parent_id" => 0,"title" => "Questionnaire one"),
        "1" => Array("id" => 84,"parent_id" => 0,"title" => "Questionnaire two"),
        "2" => Array("id" => 85,"parent_id" => 83,"title" => "Questionnaire three"));

$id = array_map(function ($item) {return $item["id"];}, $array);
$parent = array_filter($array, function ($item){return $item['parent_id'] == 0;});
$lists = array();

foreach ($parent as $value)
{
    $lists[] = $value ;
    $children = array_filter($array, function ($item) use($value) {return $item['parent_id'] == $value['id'];});
    foreach($children as $kids)
    {
        $lists[]  = $kids ;
    }
}

echo "<pre>";
print_r($lists);

输出

Array
(
    [0] => Array
        (
            [id] => 83
            [parent_id] => 0
            [title] => Questionnaire one
        )

    [1] => Array
        (
            [id] => 85
            [parent_id] => 83
            [title] => Questionnaire three
        )

    [2] => Array
        (
            [id] => 84
            [parent_id] => 0
            [title] => Questionnaire two
        )

)

【讨论】:

  • multiGroup($array, "id", "parent_id") 打印出与我的原始数组相同的数组结构。我希望子项列在其父项下?我也不想像您的第二个示例那样创建带有子数组的子项。
  • 当我得到这个输出时,这个解决方案是否需要任何特定的 PHP 版本:Array ( [0] =&gt; Array ( [id] =&gt; 83 [parent_id] =&gt; 0 [title] =&gt; Questionnaire one ) [1] =&gt; Array ( [id] =&gt; 84 [parent_id] =&gt; 0 [title] =&gt; Questionnaire two ) [2] =&gt; Array ( [id] =&gt; 85 [parent_id] =&gt; 83 [title] =&gt; Questionnaire three ) ) 这是相同的输入。我正在运行 PHP 5.3.3。我有一种感觉 use() 没有为我运行。
  • 不,它适用于 php 5.3 .. 见 codepad.viper-7.com/hirHId 你使用的是什么版本???
  • 我正在运行 5.3.3。奇怪,因为我复制并粘贴了您的代码,但我的输出不正确。不使用 use() 函数是否可以实现相同的解决方案。出于某种原因,这对我不起作用?
  • 等一下,让我再仔细看看这个
【解决方案2】:

您可以使用uksort()。这是DEMO

function cmp($a, $b) {
  if ($stock[$a] != $stock[$b]) return $stock[$b] - $stock[$a];
  return strcmp($a, $b);
}

$a = array(5 => 'apple', 1 => 'banana', 6 => 'orange', 2 => 'kiwi');

uksort($a, "cmp");

foreach ($a as $key => $value) {
   echo "$key: $value\n";
}

【讨论】:

  • 这并没有实现我想要的重组。
  • 什么是$stock
猜你喜欢
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 2019-10-30
  • 2021-10-08
  • 2020-05-05
  • 2020-01-29
相关资源
最近更新 更多