gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-28 23:55:12 33 4
gpt4 key购买 nike

我有一个数组数组:

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 数组。

下面的例子使用了 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);

这项工作的关键是要比较值,即 $order 数组中 id 的位置。

比较函数的工作原理是在 $order 数组中找到要比较的两个项目的 id 的位置。如果 $a['id']$order 数组中出现在 $b['id'] 之前,则返回值函数将为负数($a 不太会“ float ”到顶部)。如果 $a['id'] 出现在 $b['id'] 之后,则函数返回一个正数($a 大于所以“下沉”了)。

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

关于php - 按自定义顺序对数组的php数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11145393/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com