【问题标题】:PHP - usort with multiple custom order arrays?PHP - 使用多个自定义订单数组进行排序?
【发布时间】:2021-10-25 17:18:56
【问题描述】:

我正在使用我的 ACF 字段在 Wordpress 中获得 REST API 响应。我想根据每个字段的指定顺序数组按两个不同的字段对数组进行排序。我见过this question,但他们没有使用自定义排序顺序,所以我不确定如何将解决方案应用于我的情况。我已经对这样的一阶数组进行了排序(product_size 是我的 ACF 字段):

$sizeOrder = array('Small', 'Medium', 'Large');
usort($data, function ($a, $b) use ($sizeOrder) {
    $pos_a = array_search($a['acf']['product_size'], $sizeOrder);
    $pos_b = array_search($b['acf']['product_size'], $sizeOrder);
    return $pos_a - $pos_b;
});

现在假设我还想按另一个顺序数组对另一个名为 product_color 的 ACF 字段进行排序:

$colorOrder = array('White', 'Blue', 'Black');

这两种可以合二为一吗?我尝试只是复制下面的代码并换出 order 数组和 ACF 字段,但是按大小排序不起作用。

【问题讨论】:

  • 当然,如果您执行两个单独的排序操作,您不会得到想要的结果。您需要一次性完成这两项工作。如果两个项目的大小相同,那么您需要比较它们的颜色顺序,并返回第二次比较的结果。

标签: php sorting usort


【解决方案1】:

好的,所以问题是您正在排序一种方式,然后只是进入并采用另一种方式来消除您的第一种方式。

您需要做的是按级别排序,然后按大小排序。

usort 应该允许您像这样按多列排序:

 usort($data, function ($a, $b) use ($sizeOrder, $colorOrder)

【讨论】:

    猜你喜欢
    • 2014-04-01
    • 1970-01-01
    • 2012-06-24
    • 2014-04-19
    • 1970-01-01
    • 2013-05-08
    • 2019-06-10
    相关资源
    最近更新 更多