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

我有一个数组数组:

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

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

以上是 按自定义顺序对数组的php数组进行排序 的全部内容, 来源链接: utcz.com/qa/424017.html

回到顶部