【问题标题】:PHP Array [Sorting + Grouping]PHP数组【排序+分组】
【发布时间】:2016-03-21 17:24:16
【问题描述】:

如何在 PHP 中使用条件对数组进行排序? 我希望数组按 ID 排序,然后按父 ID 在 ID 内而不是在 ID 之后排序。 这样做的原因是将其实现到 jQuery TreeGrid 中。

例如:

Array 
(
[0] => Array
    (
        [0] => 1 //ID
        [1] => TEST //Name
        [2] => 1 //Parent ID
    )
[1] => Array
    (
        [0] => 2 //ID
        [1] => TEST //Name
        [2] => 2 //Parent ID
    )
[2] => Array
    (
        [0] => 3 //ID
        [1] => TEST //Name
        [2] => 3 //Parent ID
    )
[3] => Array
    (
        [0] => 4 //ID
        [1] => TEST //Name
        [2] => 1 //Parent ID
    )
[4] => Array
    (
        [0] => 5 //ID
        [1] => TEST //Name
        [2] => 2 //Parent ID
    )
)

排序后变成这样:

Array 
(
[0] => Array
    (
        [0] => 1 //ID
        [1] => TEST //Name
        [2] => 1 //Parent ID
    )
[1] => Array
    (
        [0] => 4 //ID
        [1] => TEST //Name
        [2] => 1 //Parent ID
    )
[2] => Array
    (
        [0] => 2 //ID
        [1] => TEST //Name
        [2] => 2 //Parent ID
    )
[3] => Array
    (
        [0] => 5 //ID
        [1] => TEST //Name
        [2] => 2 //Parent ID
    )
[4] => Array
    (
        [0] => 3 //ID
        [1] => TEST //Name
        [2] => 3 //Parent ID
    )
)

【问题讨论】:

标签: php arrays sorting


【解决方案1】:

您可以使用array_multisort ()

//get lists to sort by
foreach ($your_array as $key => $value) {

    $id_array[$key]        = $value[0];
    $parent_id_array[$key] = $value[2];

}

//sort first by `id` ascending, then by `parent_id` ascending
array_multisort ($id_array, SORT_ASC, $parent_id_array, SORT_ASC, $your_array);

你甚至可以使用array_orderby ()来缩短上面的例子:

$your_array = array_orderby ($your_array, 0, SORT_ASC, 2, SORT_ASC);

【讨论】:

  • 这种方法只能对ID进行排序,Parent ID在ID下排序,不在ID内..
【解决方案2】:

使用此代码。它会工作

foreach ($data as $key => $row) {
    $id[$key] = $row[0];
    $parent_id[$key] = $row[2];
}

array_multisort($id,SORT_ASC,$parent_id,SORT_ASC,$data);

【讨论】:

  • 这种方法只能对ID进行排序,Parent ID在ID下排序,不在ID内..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
相关资源
最近更新 更多