当我尝试对多个数组进行排序时,array_multisort()无法正常工作

时间:2019-07-15 07:14:40

标签: php arrays sorting

我有这个数组$mergeArr

  array (size=5)
  'facebook' => 
    array (size=3)
      'facebook_enabled' => string '1' (length=1)
      'facebook_url' => string 'https://www.facebook.com/' (length=25)
      'facebook_order' => string '7' (length=1)   //order element
  'twitter' => 
    array (size=3)
      'twitter_enabled' => string '1' (length=1)
      'twitter_url' => string 'https://www.twitter.com/' (length=24)
      'twitter_order' => string '9' (length=1)   //order element
  'instagram' => 
    array (size=3)
      'instagram_enabled' => string '1' (length=1)
      'instagram_url' => string 'https://www.instagram.com/' (length=26)
      'instagram_order' => string '2' (length=1)  //order element
  'linkedin' => 
    array (size=3)
      'linkedin_enabled' => string '1' (length=1)
      'linkedin_url' => string 'https://www.linkedin.com/' (length=25)
      'linkedin_order' => string '5' (length=1)  //order element
  'pintrest' => 
    array (size=3)
      'pinterest_enabled' => string '1' (length=1)
      'pinterest_url' => string 'https://www.pinterest.com/' (length=26)
      'pinterest_order' => string '3' (length=1)  //order element

我需要根据每个数组中的*_order元素对其进行排序。

我尝试了以下代码:

代码PHP:

array_multisort(array_column($mergeArr, '2'), SORT_ASC, $mergeArr);

预期的输出顺序为:Instagram,Pinterest,Linkedin,Facebook,Twiter。

我收到的错误如下

  

array_multisort():数组大小不一致

能否请您告诉我如何对该数组进行排序,以便得到所需的内容?

谢谢!

1 个答案:

答案 0 :(得分:3)

如果要比较的字段始终位于第三个键中,则可以使用usortarray-values来做到这一点:

usort($array, function($a, $b) {
    $a = array_values($a);
    $b = array_values($b);
    return $a[2] > $b[2];
});

实时示例:3v4l