如何按自定义顺序对数组进行排序

时间:2018-07-03 10:15:35

标签: php arrays sorting

我有一个数组,我想按特定顺序输出价值。我该怎么做。

数组

$age = array(48,37,43,56,32);

我想要的输出

37
56
43
32
48

我已将array $age放入foreach循环中。我在foreach循环之外创建了另一个数组。如果array Push,我正在做value = xx。它不起作用。

最好的方法是什么,这样我才能使结果按上述顺序显示。

1 个答案:

答案 0 :(得分:0)

我不确定,我能正确理解您的问题,但是如果您已经知道顺序,那么创建此数组的目的是什么。

好吧,我想我有两种解决方案可以按照您的自定义顺序对该数组进行排序

选项1

指定$order数组(如果您已经知道),然后使用usort比较$age$order数组的值。 usort将在$age数组中找到$order的项目。

$order = array(37, 56, 43, 32, 48);
$age = array(48, 37, 43, 56, 32);

usort($age, function ($a, $b) use ($order) {
    $firstItem  = array_search($a, $order);
    $secondItem = array_search($b, $order);

    return $firstItem - $secondItem;
});

print_r($age);
  

我用过closure   usort中使排序更简单

输出

Array
(
    [0] => 37
    [1] => 56
    [2] => 43
    [3] => 32
    [4] => 48
)
  

您可以检查usort和   array_search

选项2

从您的评论中,我试图提出另一种方法,该方法是在$age$order数组中设置键,并比较两个数组以按自定义顺序对其进行排序。

$order = array('students', 'adults', 'disable', 'enable', "variable");
$age = array(
    'variable' => 48,
    'students' => 37,
    'disable' => 43,
    'adults' => 56,
    'enable' => 32
);

$ordered_array = array_merge(array_flip($order), $age);
print_r($ordered_array);

输出

Array
(
    [students] => 37
    [adults] => 56
    [disable] => 43
    [enable] => 32
    [variable] => 48
)
  

也检查   array_merge和   array_flip