手动排序类别 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);
我有四个类别,类别 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);