当前位置: 首页 > 面试题库 >

按自定义顺序对数组的php数组进行排序

唐高朗
2023-03-14
问题内容

我有一个数组数组:

Array ( 
    [0] => Array (
        [id] = 7867867,
        [title] = 'Some Title'),
    [1] => Array (
        [id] = 3452342,
        [title] = 'Some Title'),
    [2] => Array (
        [id] = 1231233,
        [title] = 'Some Title'),
    [3] => Array (
        [id] = 5867867,
        [title] = 'Some Title')
)

需要按特定顺序进行:

  1. 3452342
  2. 5867867
  3. 7867867
  4. 1231233

我将如何去做?我之前已经对数组进行了排序,并阅读了许多其他文章,但它们始终基于比较(即valueA <valueB)。

感谢帮助。


问题答案:

您可以usort()用来精确指示如何对数组进行排序。在这种情况下,$order可以在比较函数中使用该数组。

下面的示例使用a closure使生活更轻松。

$order = array(3452342, 5867867, 7867867, 1231233);
$array = array(
    array('id' => 7867867, 'title' => 'Some Title'),
    array('id' => 3452342, 'title' => 'Some Title'),
    array('id' => 1231233, 'title' => 'Some Title'),
    array('id' => 5867867, 'title' => 'Some Title'),
);

usort($array, function ($a, $b) use ($order) {
    $pos_a = array_search($a['id'], $order);
    $pos_b = array_search($b['id'], $order);
    return $pos_a - $pos_b;
});

var_dump($array);

这项工作的关键是使要比较的值成为ids在$order数组中的位置。

比较功能通过找到要在$order数组中进行比较的两个项目的id的位置来工作。如果在数组中位于$a['id']before
,则该函数的返回值将为负(该值较小,因此“
floats”位于顶部)。如果在此之后出现,则该函数返回一个正数(该数较大,因此“沉”下来)。$b['id']``$order``$a``$a['id']``$b['id']``$a

最后,使用闭包没有特殊的原因。这只是我快速编写此类一次性函数的首选方法。它可以同样使用正常的命名函数。



 类似资料:
  • 问题内容: 我有一个对象数组,这些对象的属性称为“ CODE”。 如何通过自定义顺序对数组进行排序,例如: 尝试各种方法均未成功。请帮忙。 问题答案: 您可以将函数与函数一起使用。

  • 问题内容: 我有一个数组: 如果使用,则输出为: 但是我需要实现以下排序: 我想我需要实现和重写方法: 我应该如何解决这个问题? 问题答案: 您还可以添加: 如果数组不区分大小写。 显然,OP不仅要比较字母,还希望比较字母字符串,所以比较复杂:

  • 问题内容: 我有一个由数组组成的数组。我想通过子数组的属性对父数组进行排序。这是一个例子 我想通过在子数组中升序对父数组进行排序,因此在这种情况下,结果将是子数组颠倒(,)。使用众多的PHP排序函数中的任何一种,是否可能? 问题答案: 您可以将usort函数用作:

  • 问题内容: 我想就这个小问题得到您的帮助。 我想根据 代码 值 而不是字母顺序 对数组 进行排序。 ( 我用粗体字指定了该名称,但最终还是被标记出来了,人们甚至都不在乎阅读该问题 ) 例如,我想有所有 绿色的 对象,那么所有的 蓝色 的人,然后将所有的 红色 的。最好的方法是什么? 使用 sort 函数可以做到这一点吗?在这种情况下会是什么情况? 问题答案: 您可以为所需订单取一个对象。 对于未知

  • 问题内容: 我有这个: 和[电影]数组。如何按名称的字母顺序对数组进行排序?我试过了: 和 但这不起作用,因为我没有访问电影的名称属性。 问题答案: 在传递给的闭包中,比较要排序的属性。像这样: 或以下要绕过案例的案例: 旁注: 通常,只有类型以大写字母开头;我建议使用and ,而不是and 。 例如,在操场上: 将按顺序 Swift5更新

  • 问题内容: 我有以下数组结构: 基于,以增量方式对数组进行排序的最佳方法是什么? 因此结果如下所示: 问题答案: 使用。 在PHP≥5.3中,应改为使用匿名函数: 请注意,以上两个代码均假定为整数。 在PHP≥7.0,使用,而不是减法,以防止溢出/截断问题。