我知道已经有很多关于数组排序的帖子,但我到处寻找,找不到解决我问题的方法。
我在这里找到了一篇非常好的文章: 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/