【问题标题】:array_multisort not working properly?array_multisort 不能正常工作?
【发布时间】:2017-04-07 05:13:24
【问题描述】:

我像往常一样使用array_multisort,但这次它确实无法正确排序。

我用它对多维数组($data)进行排序,但我在这个例子中简化了问题:

    $data = array(6 => 'WEEK 48', 7 => 'WEEK 49', 8 => 'WEEK 47', 9 => 'WEEK 50', 10 => 'WEEK 51');

    $sort = array(8 => 201647, 6 => 201648, 7 => 201649, 9 => 201650, 10 => 201651);

    array_multisort($sort, SORT_ASC, $data);

    Output:
    Array
    (
        [0] => WEEK 48
        [1] => WEEK 49
        [2] => WEEK 47
        [3] => WEEK 50
        [4] => WEEK 51
    )

我错过了什么?

【问题讨论】:

标签: php array-multisort


【解决方案1】:

试试这个

    <?php

       $data = array(6 => 'WEEK 48', 7 => 'WEEK 49', 8 => 'WEEK 47', 9 => 'WEEK 50', 10 => 'WEEK 51');

        $sort = array(8 => 201647, 6 => 201648, 7 => 201649, 9 => 201650, 10 => 201651);

        array_multisort($data, SORT_ASC, $sort);

         echo '<pre>';
         print_r($data);

   ?>

输出:

Array
(
    [0] => WEEK 47
    [1] => WEEK 48
    [2] => WEEK 49
    [3] => WEEK 50
    [4] => WEEK 51
)

【讨论】:

  • 我需要 $sort 作为排序数组,因为 $data 实际上是一个多维数组。为什么反过来就不行?
【解决方案2】:

语法

array_multisort(array1,sorting order,sorting type,array2,array3...)

您应该为您的阵列提供sorting_type

array_multisort($sort, SORT_ASC, SORT_STRING, $data, SORT_ASC, SORT_NUMERIC);

var_dump($sort);
var_dump($data);

结果:

array(5) { 
    [0]=> int(201647) 
    [1]=> int(201648) 
    [2]=> int(201649) 
    [3]=> int(201650) 
    [4]=> int(201651) 
} 

array(5) { 
    [0]=> string(7) "WEEK 47" 
    [1]=> string(7) "WEEK 48" 
    [2]=> string(7) "WEEK 49" 
    [3]=> string(7) "WEEK 50" 
    [4]=> string(7) "WEEK 51" 
}

【讨论】:

  • $data 仍未正确排序。
  • 我已经更新了答案 =_= 我忘记了sorting_type for $data
  • opps,缺少sorting_order 而不是sorting_type,抱歉
  • 但是我不想用$data来排序,我想用$data来排序。 $data 实际上是一个多维数组。
【解决方案3】:

愚蠢的我,行之间有一个ksort($data) 搞砸了排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-30
    • 2010-11-30
    • 2021-10-02
    • 2017-08-06
    • 2013-11-22
    • 1970-01-01
    • 2013-09-10
    相关资源
    最近更新 更多