2013-10-21 42 views
-1

我有一個有趣的挑戰。我有一個數組,看起來像這樣:PHP按任意字符串排序嵌套數組

array(
[1] = array(
    'fruit' => 'Banana' 
), 
[2] = array(
    'fruit' => 'Apple' 
), 
[3] = array(
    'fruit' => 'Grapes' 
) 
) 

我需要根據水果的數組進行排序,假設水果有這樣的優先級:

#1:蘋果

#2:香蕉

#3:葡萄

最終輸出應爲:

array(
[2] = array(
    'fruit' => 'Apple' 
), 
[1] = array(
    'fruit' => 'Banana' 
), 
[3] = array(
    'fruit' => 'Grapes' 
) 
) 

這是通過某種usort()欺騙?

+0

是的,這_would_與'usort()完成'。這是否回答你的問題? – Wrikken

+0

如果您可以將值移動到第一個級別,那麼使用array_intersect可能會更容易,然後與差異合併 –

+0

將我拋棄的主要內容是嵌套性。每個節點還有其他一些屬性。一直在用usort嘗試不同的東西,但它還沒有正確出來。 – Anthony

回答

0

如果您不需要保持索引關係:

foreach($array as $key => $values) { 
    $fruit[$key] = $values['fruit']; 
} 
array_multisort($fruit, SORT_ASC, $array); 
0

示例使用usort:

<?php 

$arr = array(
    array(
     'fruit' => 'Banana' 
    ), 
    array(
     ' fruit' => 'Apple' 
    ), 
    array(
     'fruit' => 'Grapes' 
    ) 
); 

function sortByFruit($arr1, $arr2) 
{ 
    if ($arr1['fruit'] == $arr2['fruit']) { 
     return 0; 
    } elseif ($arr1['fruit'] < $arr2['fruit']) { 
     return -1; 
    } else { 
     return 1; 
    } 
} 

usort($arr, 'sortByFruit');