【问题标题】:Manually Sort Categories PHP usort手动排序类别 PHP usort
【发布时间】: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) - 显示所有错误

标签: php arrays sorting usort


【解决方案1】:

您的代码不正确。这里更正了:

$categories = array('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);

【讨论】:

  • 谢谢!我认为出于某种原因它需要 ['string'] 位。可能只是盯着它太久了!
猜你喜欢
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多