php - 根据另一个数组的顺序对数组子项进行排序

标签 php arrays sorting multidimensional-array

我知道已经有很多关于数组排序的帖子,但我到处寻找,找不到解决我问题的方法。

我在这里找到了一篇非常好的文章: http://firsttube.com/read/sorting-a-multi-dimensional-array-with-php/

上面的链接很好,但是,我希望更进一步,根据另一个数组的顺序对数组子键进行排序。

那么,假设播放列表数组中有五首歌曲:

Array
(
    [0] => 3oh!3 - Don't Trust me
    [1] => Taylor Swift - You Belong with me
    [2] => Sean Kingston - Fire Burning
    [3] => Green Day - Know Your Enemy
    [4] => Kelly Clarkson - Gone
)

假设我们有以下信息,我们希望对其进行排序以匹配播放列表数组的顺序:

Array
(
    [0] => Array
        (
            [trackName] => Taylor Swift - You Belong With Me
            [trackLength] => 0
            [trackViews] => 0
            [trackRating] => 0
        )

    [1] => Array
        (
            [trackName] => Sean Kingston - Fire Burning
            [trackLength] => 0
            [trackViews] => 0
            [trackRating] => 0
        )

    [2] => Array
        (
            [trackName] => 3OH!3- Dont Trust Me 
            [trackLength] => 205
            [trackViews] => 4570399
            [trackRating] => 4.866372
        )

    [3] => Array
        (
            [trackName] => Green Day Know Your Enemy 
            [trackLength] => 191
            [trackViews] => 4715494
            [trackRating] => 4.9103785
        )

    [4] => Array
        (
            [trackName] => Kelly Clarkson: Gone 
            [trackLength] => 225
            [trackViews] => 679019
            [trackRating] => 4.8995433
        )

)

所以,再次......我的问题是:我怎样才能让歌曲数组按 trackName 排序以匹配播放列表数组的相同顺序?

如有任何帮助或指导,我们将不胜感激!

谢谢。

[解决方案] EDDIE 拥有绝妙的解决方案!支持他! 1up 他的答案! :)

不过,我稍微修改了eddie的解决方案。我刚刚在用户输入的歌曲标题和在外部来源中查找的歌曲标题之间添加了 75% 的相似度检查,因为我无法控制每个标题的细微差异。

$sorted_list = array();

foreach($songs as $song_key=>$song){
   foreach($song_info as $info){
      similar_text($info['trackName'], $song, $p);
      if($p > 75){ 
        $sorted_list[$song_key] = $info;
      }
   }
}

最佳答案

假设您的播放列表在数组 $songs 中,而您的另一个数组在 $songs_info 中。

$sorted_list = array();

foreach($songs as $song_key=>$song){
   foreach($song_info as $info){
      if($info['trackName'] == $song){
          $sorted_list[$song_key] = $info;
      }
   }
}

// $sorted_list contains sorted list

关于php - 根据另一个数组的顺序对数组子项进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6711548/

相关文章:

php - 使用登录时不显示页面,但显示页面代码

mysql - ORDER BY [My]SQLite 上文本列的离散值]

sorting - 分区排序和快速排序有什么区别?

java - 如何正确使用ByteBuffer?

arrays - Postgresql 使用函数检查数组中所有单个元素的约束

java - 在 java 中使用数组对文本文件进行排序时丢弃的第一个元素

javascript - Ajax 请求正在取消页面上的其他 JS 事件

php - 使用Simple HTML Dom的错误PHP网站爬虫类

php - 将 HTML 选择选项值插入 mysql 表不起作用

c++ - 直接访问结构的元素