【发布时间】:2015-07-28 16:49:58
【问题描述】:
我有四个类别 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;
});
一个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 顺序对类别进行排序,我们将不胜感激。
【问题讨论】:
-
usor 排序和你传递的一样多。如果它没有正确排序,那么你的比较功能就不能正常工作。
-
那是你的代码。它工作正常eval.in/407532
-
您使用的“字符串”索引是什么?
-
@splash58 你只是关闭了错误报告 :)
-
error_reporting(-1)- 显示所有错误