array_multisort用于数字和字符串

时间:2018-05-27 19:18:42

标签: php

在PHP中,与字符相比,数字的ASCII值是否较低?我理解array_multisort是如何工作的,但是当涉及数字和字符时,如果我们按升序排序,它将首先出现。

这是PHP array_multisort的示例。

$ar = array(
       array("10", 11, 100, 100, "a"),  //10
       array(   1,  2, "2",   3,   1)
      );
array_multisort($ar[0], SORT_ASC, SORT_STRING,
                $ar[1], SORT_NUMERIC, SORT_DESC);
var_dump($ar);


array(2) {
  [0]=>
  array(5) {
    [0]=>
    string(2) "10"
    [1]=>
    int(100)
    [2]=>
    int(100)
    [3]=>
    int(11)
    [4]=>
    string(1) "a"
  }
  [1]=>
  array(5) {
    [0]=>
    int(1)
    [1]=>
    int(3)
    [2]=>
    string(1) "2"
    [3]=>
    int(2)
    [4]=>
    int(1)
  }
}

查看上面的示例,我们从“10”开始,作为搜索中的第一个值。为什么搜索排序11不是下一个值,但是当我们按升序排序时,它将100作为下一个值?

然后array_multisort跳转到第二个数组,因为它在第一个搜索中有两个100。

谢谢

1 个答案:

答案 0 :(得分:1)

您需要使用SORT_NATURAL按照预期的顺序对它们进行排序。 (与natsort相同)

$ar = array(
    array("10", 11, 100, 100, "a"),  //10
    array(   1,  2, "2",   3,   1)
);
array_multisort($ar[0], SORT_ASC, SORT_NATURAL,
    $ar[1], SORT_NUMERIC, SORT_DESC );  
var_dump($ar);

...输出

array(2) {
  [0] =>
  array(5) {
    [0] =>
    string(2) "10"
    [1] =>
    int(11)
    [2] =>
    int(100)
    [3] =>
    int(100)
    [4] =>
    string(1) "a"
  }
  [1] =>
  array(5) {
    [0] =>
    int(1)
    [1] =>
    int(2)
    [2] =>
    int(3)
    [3] =>
    string(1) "2"
    [4] =>
    int(1)
  }
}