如何在PHP中基于数组元素对数组进行排序?

时间:2019-07-12 08:16:21

标签: php arrays sorting

我有一个具有这种形式的数组

代码PHP:

$mergeArr = array_merge($facebookURL, $twitterURL, $instagramURL, $linkedinURL, $pinterestURL); 

    array (size=15)
      'fbenabled' => string '1' (length=1)
      'fburl' => string 'https://www.facebook.com' (length=24)
      'fborder' => string '4' (length=1)         // order element
      'twenabled' => string '1' (length=1)
      'twurl' => string 'https://www.twiiter.com' (length=23)
      'tworder' => string '7' (length=1)         // order element
      'instaenabled' => string '1' (length=1)
      'instaurl' => string 'https://www.instagram.com' (length=25)
      'instaorder' => string '9' (length=1)      // order element
      'linkenabled' => string '1' (length=1)
      'linkurl' => string 'https://www.linkedin.com' (length=24)
      'linkorder' => string '2' (length=1)       // order element
      'pinenabled' => string '1' (length=1)
      'pinurl' => string 'https://www.pinterest.com' (length=25)
      'pinkorder' => string '1' (length=1)       // order element

我想根据每个元素的"order"值对该数组进行排序。

数组的新形式应为:

   array (size=15)
          'pinenabled' => string '1' (length=1)
          'pinurl' => string 'https://www.pinterest.com' (length=25)
          'pinkorder' => string '1' (length=1)       // order element
          'linkenabled' => string '1' (length=1)
          'linkurl' => string 'https://www.linkedin.com' (length=24)
          'linkorder' => string '2' (length=1)       // order element
          'fbenabled' => string '1' (length=1)
          'fburl' => string 'https://www.facebook.com' (length=24)
          'fborder' => string '4' (length=1)         // order element
          'twenabled' => string '1' (length=1)
          'twurl' => string 'https://www.twiiter.com' (length=23)
          'tworder' => string '7' (length=1)         // order element
          'instaenabled' => string '1' (length=1)
          'instaurl' => string 'https://www.instagram.com' (length=25)
          'instaorder' => string '9' (length=1)      // order element

能帮我订购这个阵列吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

最好的选择是使用concat

$mergeArr = array(
    'facebook'  => $facebookURL, 
    'twitter'   => $twitterURL, 
    'instagram' => $instagramURL, 
    'linkedin'  => $linkedinURL, 
    'pintrest'  => $pinterestURL
);

usort($mergeArr, function($a, $b) {

    return $a['order'] - $b['order'];

});

现在,我再次看一下您的代码,我注意到要实现的顺序实际上是难以实现的,您想将twitter,instagram和facebook相关元素分组而不实际对其进行分组。

您可能希望重新组织数组,使其看起来像这样:

{{1}}

要使其正常工作,您需要将“ order”键更改为“ order”一词,例如将“ pinkorder”更改为“ order”,将“ linkorder”更改为“ order”,等等。