【问题标题】:Sort array alphabetically then numerically in PHP?在PHP中按字母顺序排序数组然后按数字排序?
【发布时间】:2019-07-10 08:24:37
【问题描述】:

参考这篇帖子php-sort-array-alphabetically-then-numerically

它不能解决我的问题。

我有一个数组名$test,如果print_r($test)会显示

Array
(
    [0] => Array
        (
            [hrid] => 1
            [masterroom] => B4-G-3
        )

    [1] => Array
        (
            [hrid] => 2
            [masterroom] => B4-G-1
        )

    [2] => Array
        (
            [hrid] => 7
            [masterroom] => B4-1-2
        )

    [3] => Array
        (
            [hrid] => 8
            [masterroom] => B4-1-1
        )

    [4] => Array
        (
            [hrid] => 9
            [masterroom] => B4-1-10
        )

    [5] => Array
        (
            [hrid] => 10
            [masterroom] => B4-G-10
        )
)

我在下面尝试(参考上面链接的答案):

function myComparison($a, $b){
    if(is_numeric($a) && !is_numeric($b))
        return 1;
    else if(!is_numeric($a) && is_numeric($b))
        return -1;
    else
        return ($a < $b) ? -1 : 1;
} 
usort ( $test , 'myComparison' );

结果是:

Array
(
    [0] => Array
        (
            [hrid] => 1
            [masterroom] => B4-G-1
        )

    [1] => Array
        (
            [hrid] => 2
            [masterroom] => B4-G-3
        )

    [2] => Array
        (
            [hrid] => 7
            [masterroom] => B4-1-1
        )

    [3] => Array
        (
            [hrid] => 8
            [masterroom] => B4-1-2
        )

    [4] => Array
        (
            [hrid] => 9
            [masterroom] => B4-1-10
        )

    [5] => Array
        (
            [hrid] => 10
            [masterroom] => B4-G-10
        )
)

但我希望它是:

Array
(
    [0] => Array
        (
            [hrid] => 1
            [masterroom] => B4-G-1
        )

    [1] => Array
        (
            [hrid] => 2
            [masterroom] => B4-G-3
        )

    [2] => Array
        (
            [hrid] => 10
            [masterroom] => B4-G-10
        )

    [3] => Array
        (
            [hrid] => 7
            [masterroom] => B4-1-1
        )

    [4] => Array
        (
            [hrid] => 8
            [masterroom] => B4-1-2
        )

    [5] => Array
        (
            [hrid] => 9
            [masterroom] => B4-1-10
        )

)

谢谢。

【问题讨论】:

  • 在当前数据中你有[hrid] =&gt; 1 [masterroom] =&gt; B4-G-3,而在预期结果中有[hrid] =&gt; 1 [masterroom] =&gt; B4-G-1,对吗?

标签: php arrays sorting


【解决方案1】:

你应该看看你是否可以更新你的 PHP。你这应该从5.5开始工作

<?php

$array = [
  [
    "hrid" => 1,
    "masterroom" => "B4-G-3"
  ],
  [
    "hrid" => 2,
    "masterroom" => "B4-G-1"
  ],
  [
    "hrid" => 7,
    "masterroom" => "B4-1-2"
  ],
  [
    "hrid" => 8,
    "masterroom" => "B4-1-1"
  ], [
    "hrid" => 9,
    "masterroom" => "B4-1-10"
  ],
  [
    "hrid" => 10,
    "masterroom" => "B4-G-10"
  ]
];

$masterroom  = array_column($array, 'masterroom');
$hrid = array_column($array, 'hrid');

array_multisort($masterroom, SORT_NATURAL, $hrid, SORT_ASC, $array);

var_dump($array);

呼吸示例:https://3v4l.org/NaMqS PHP 5.5+ 呼吸示例:https://3v4l.org/Bc88G Pre PHP 5.5

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 2019-01-26
  • 2013-03-18
  • 1970-01-01
  • 2011-03-25
相关资源
最近更新 更多