按子阵列的第一个元素按字母顺序对数组进行排序

时间:2016-09-01 14:44:52

标签: php arrays sorting

我正在寻找一种对数组进行排序的方法:

$array = array(
     [0] => array('a', '1', '2', '3', '4,' test'),
     [1] => array('c', '1', '2', '3', '5', 'test'),
     [2] => array('b', '1', '3', '4,' 5,', 'test),
);

这样它就可以根据子数组的第一个元素对子数组进行排序,这样它就会返回:

$array = array(
     [0] => array('a', '1', '2', '3', '4,' test'),
     [1] => array('b', '1', '3', '4,' 5,', 'test),
     [2] => array('c', '1', '2', '3', '5', 'test'),
);

有没有人有这样做的好方法?

谢谢!

3 个答案:

答案 0 :(得分:1)

<?php 

$array = array(
     0 => array('a', '1', '2', '3', '4', 'test'),
     1 => array('c', '1', '2', '3', '5', 'test'),
     2 => array('b', '1', '3', '4', '5', 'test'),
);

array_multisort(array_column($array, 1), SORT_ASC, $array);

print_r($array);

输出:

Array
(
    [0] => Array
        (
            [0] => a
            [1] => 1
            [2] => 2
            [3] => 3
            [4] => 4
            [5] => test
        )

    [1] => Array
        (
            [0] => b
            [1] => 1
            [2] => 3
            [3] => 4
            [4] => 5
            [5] => test
        )

    [2] => Array
        (
            [0] => c
            [1] => 1
            [2] => 2
            [3] => 3
            [4] => 5
            [5] => test
        )

)

https://eval.in/633355

答案 1 :(得分:1)

usort就是您所需要的:http://php.net/manual/en/function.usort.php

对于PHP 7:

usort($myArray, function($a, $b) {
    return $a['order'] <=> $b['order'];
});

PHP 5.3或++

usort($myArray, function($a, $b) {
    return $a['order'] - $b['order'];
});

PHP 5.2或更早版本

function mySort($a, $b) {
    return $a['order'] - $b['order'];
}

usort($myArray, 'mySort');

编辑: mySort而非'排序'来自@ Do not Panic的评论。谢谢!

答案 2 :(得分:0)

确实使用usort() PHP manual

$array = array(
        array('a', '1', '2', '3', '4','test'),
        array('c', '1', '2', '3', '5', 'test'),
        array('b', '1', '3', '4','5','test'));

usort($array, function ($a, $b)
        {
            if ($a[0] == $b[0]) {
                return 0;
            }
            return ($a[0] < $b[0]) ? -1 : 1;
        });

var_dump($array);