简体   繁体   English

在PHP中按字母顺序对数组进行排序,然后按数字对数组进行排序?

[英]Sort array alphabetically then numerically in PHP?

Refer to this post php-sort-array-alphabetically-then-numerically 请参阅这篇文章php-sort-array-alphabetically-then-numerically

It can't solve my problem. 它不能解决我的问题。

I have an array name $test , if print_r($test) will show 我有一个数组名称$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
        )
)

And I try below (refer to above link's answer): 我尝试以下(请参阅上面的链接的答案):

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' );

The result are: 结果是:

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
        )
)

But I want it to be: 但我希望它是:

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
        )

)

Thank you. 谢谢。

You should see if you could update your PHP. 您应该查看是否可以更新PHP。 Thou this should work as of 5.5 您应该从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);

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM