我如何排序这个数组的值“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
        )
)

当前回答

$sort = array();
$array_lowercase = array_map('strtolower', $array_to_be_sorted);
array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $alphabetically_ordered_array);

这可以同时考虑大写字母和小写字母。

其他回答

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

试一试。如果你仍然使用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");

最灵活的方法是使用以下方法:

Arr::sortByKeys(array $array, $keys, bool $assoc = true): array

原因如下:

你可以根据任意键进行排序(也可以像'key1.key2 '那样嵌套)。Key3 '或['k1', 'k2', 'k3']) 它既适用于关联数组也适用于非关联数组($assoc标志) 它不使用引用——它返回一个新的排序数组

在你的情况下,这将是简单的:

$sortedArray = Arr::sortByKeys($array, 'order');

这个方法是这个库的一部分。

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

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

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