2013-10-21 37 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');