我如何排序这个数组的值“order”键?

尽管这些值目前是连续的,但它们并不总是连续的。

Array
(
    [0] => Array
        (
            [hashtag] => a7e87329b5eab8578f4f1098a152d6f4
            [title] => Flower
            [order] => 3
        )

    [1] => Array
        (
            [hashtag] => b24ce0cd392a5b0b8dedc66c25213594
            [title] => Free
            [order] => 2
        )

    [2] => Array
        (
            [hashtag] => e7d31fc0602fb2ede144d18cdffd816b
            [title] => Ready
            [order] => 1
        )
)

当前回答

 example  with class:
 
 class user
 {
     private $key;

     public function __construct(string $key)
     {
         $this->key = $key;
     }

     public function __invoke($a, $b)
     {
         return $a[$this->key] <=> $b[$this->key];
     }
 }

 $user = [
     ['id' => 1, 'name' => 'Oliver', 'id_card' => 4444],
     ['id' => 3, 'name' => 'Jack', 'id_card' => 5555],
     ['id' => 2, 'name' => 'Harry', 'id_card' => 6666]
 ];

 // sort user by id
 usort($user, new user('id'));
 var_dump($user);

其他回答

为了实现这一点,我们可以使用“array_multisort”方法,该方法“对多个或多维数组进行排序”。方法参数为

$keys -正在排序的数组 SORT_ASC -排序顺序(升序) 排序标志(正常比较项(不改变类型)) 或者数字形式,或者字符串形式) $new -然后是其余的数组。只有元素 对应于前面的等效元素 比较数组。

'sort flags'默认为SORT_REGULAR,它被省略。

$new = [
    [
        'hashtag' => 'a7e87329b5eab8578f4f1098a152d6f4',
        'title' => 'Flower',
        'order' => 3,
    ],
    [
        'hashtag' => 'b24ce0cd392a5b0b8dedc66c25213594',
        'title' => 'Free',
        'order' => 2,
    ],
    [
        'hashtag' => 'e7d31fc0602fb2ede144d18cdffd816b',
        'title' => 'Ready',
        'order' => 1,
    ],
];
$keys = array_column($new, 'order');
array_multisort($keys, SORT_ASC, $new);
var_dump($new);

结果:

Array
(
    [0] => Array
        (
            [hashtag] => e7d31fc0602fb2ede144d18cdffd816b
            [title] => Ready
            [order] => 1
        )
    [1] => Array
        (
            [hashtag] => b24ce0cd392a5b0b8dedc66c25213594
            [title] => Free
            [order] => 2
        )
    [2] => Array
        (
            [hashtag] => a7e87329b5eab8578f4f1098a152d6f4
            [title] => Flower
            [order] => 3
        )
)

试一试。如果你仍然使用PHP 5.2或更早的版本,你必须先定义一个排序函数:

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

usort($myArray, 'sortByOrder');

从PHP 5.3开始,你可以使用匿名函数:

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

在PHP 7中,你可以使用太空船操作符:

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

最后,在PHP 7.4中,你可以用一个箭头函数来清理一下:

usort($myArray, fn($a, $b) => $a['order'] <=> $b['order']);

要将其扩展到多维排序,如果第一个排序元素为零,则引用第二个/第三个排序元素——最好在下面解释。您还可以使用它对子元素进行排序。

usort($myArray, function($a, $b) {
    $retval = $a['order'] <=> $b['order'];
    if ($retval == 0) {
        $retval = $a['suborder'] <=> $b['suborder'];
        if ($retval == 0) {
            $retval = $a['details']['subsuborder'] <=> $b['details']['subsuborder'];
        }
    }
    return $retval;
});

如果需要保留键关联,请使用uasort() -请参阅手册中数组排序函数的比较。

function aasort (&$array, $key) {
    $sorter = array();
    $ret = array();
    reset($array);
    foreach ($array as $ii => $va) {
        $sorter[$ii] = $va[$key];
    }
    asort($sorter);
    foreach ($sorter as $ii => $va) {
        $ret[$ii] = $array[$ii];
    }
    $array = $ret;
}

aasort($your_array, "order");

你可以使用usort和带有回调函数的用户定义排序函数:

usort($new, fn($a, $b) => $a['order'] - $b['order']);

技巧:你可以使用> b或a - b或a <=> b进行升序排序。降序是a和b的交换位置。

要根据"title"键的值对数组排序,使用:

uasort($myArray, function($a, $b) {
    return strcmp($a['title'], $b['title']);
});

STRCMP比较字符串。

Uasort()维护数组键的定义。