手动排序类别 PHP usort

Manually Sort Categories PHP usort

我有四个类别,类别 ID 为 4、6、7、10,我想按以下顺序排序 4、7、6、10。

我使用 usort 来做这个,在我添加类别 10 之前它工作正常。现在我添加 10,我得到的顺序是 10,4,7,6。

A var_dump($categories); 在 usort 之前给出以下输出:

array(4) {
[0]=>
string(1) "6"
[1]=>
string(1) "4"
[2]=>
string(1) "7"
[3]=>
string(2) "10"
}

我定义了数组中类别的顺序,并在 usort 中使用它:

$order = array(4,7,6,10);
            usort($categories, function ($a, $b) use ($order) {
                $pos_a = array_search($a['string'], $order);
                $pos_b = array_search($b['string'], $order);
                return $pos_a - $pos_b;
            });

A var_dump($categories); 在 usort 之后给出:

array(4) {
  [0]=>
  string(2) "10"
  [1]=>
  string(1) "4"
  [2]=>
  string(1) "7"
  [3]=>
  string(1) "6"
}

我想不通为什么类别 10 要弹出到数组的开头而不是结尾。另外,我不知道这是否相关,但类别 10 是唯一具有 string(2) 的类别,所有其他类别都有 string(1).

难道我的usort只能对有限的类别进行排序吗?我不明白为什么会这样,但这是我唯一能想到的。

任何想法如何让类别按数组中的 4、7、6、10 顺序排序将不胜感激。

您的代码不正确。此处更正:

$类别=数组('6','4','7','10');

var_dump($categories);
$order = array(4,7,6,10);
usort($categories, function ($a, $b) use ($order) {
    $pos_a = array_search($a, $order);
    $pos_b = array_search($b, $order);
    return $pos_a - $pos_b;
});


var_dump($categories);