2011-12-17 155 views
-1
Array 
(
    [data] => Array 
     (
      [0] => Array 
       (
        [name] => Nicki Escudero 
        [id] => 27700035 
       ) 

      [1] => Array 
       (
        [name] => Yorgo Nestoridis 
        [id] => 504571368 
       ) 
     ) 
) 

如何使用名称对此多维数组进行排序?我试过array_multisort但它不起作用。PHP - 对多维数组进行排序

+2

可能重复的[排序在PHP关联数组](http://stackoverflow.com/questions/777597/sorting-an-associative-array-in-php) – Ryan 2011-12-17 16:04:46

回答

0

如果你想使用array_multisort,你可以使用下列内容:

$array = array(
    'data' => array(
     array(
      'name' => 'Yorgo Nestoridis', 
      'id' => 504571368, 
     ), 
     array(
      'name' => 'Nicki Escudero', 
      'id' => 27700035, 
     ), 
    ), 
); 

$names = array(); 
foreach($array['data'] as $datum) { 
    $names[] = $datum['name']; 
} 

array_multisort($names, SORT_ASC, $array['data']); 
var_dump($array); // now sorted by name 

另一个选择是使用自定义比较函数:的

function compareNames($a, $b) { 
    return strcmp($a['name'], $b['name']); 
} 

usort($array['data'], 'compareNames'); 
0

它已经排序:-)你想排序?数据来自哪里?如果你从数据库中得到它,你应该排序不同。

+0

我是从变换json数组。 – 2011-12-17 16:12:38

+0

JSON的来源是什么?在生成JSON之前,您不能更改排序吗?更高效.. – Richard 2011-12-17 16:13:58

+0

不使用json_decode函数将其转换为数组 – 2011-12-17 16:23:10

0

如果这些只是您拥有的两个值,那么您可以尝试使数组的索引为id,并且名称可以是该值。然后,您可以使用asort按名称对数组进行排序并保持索引值关系。我的意思是$array[27700035]将返回Nicki Escudero

// Copy the array to a new array. 
foreach($array as $val) { 
    $newArray[$val['id']] = $val['name']; 
} 

asort($newArray); 

编辑:我已经通过手动走了,你也可以使用usort使用自定义比较函数。虽然我从来没有使用过这一点,可以是非常小的帮助... PHP usort