2013-01-15 49 views
0

可能重复:
How do I sort a multidimensional array in phpPHP排序多维数组的最佳方法?

可以说我有以下多维数组:

$fruits[] = array("name"=>"orange", "price"=>3, "code"=>"A45"); 
$fruits[] = array("name"=>"apple", "price"=>2, "code"=>"W71"); 
$fruits[] = array("name"=>"grape", "price"=>4, "code"=>"G11"); 

后来想通过其price这个$fruits[]数组排序。
所以应该是:

$fruits[] = array("name"=>"apple", "price"=>2, "code"=>"W71"); 
$fruits[] = array("name"=>"orange", "price"=>3, "code"=>"A45"); 
$fruits[] = array("name"=>"grape", "price"=>4, "code"=>"G11"); 

然后我上网各地的网络了很多,终于让我找到下面一个从php manual(我调整上面我的数组变量名):

// Obtain a list of columns 
foreach ($fruits as $key => $value) { 
    $name[$key] = $value['name']; 
    $price[$key] = $value['price']; 
    $code[$key] = $value['code']; 
} 

// Sort the data with volume descending, edition ascending 
// Add $data as the last parameter, to sort by the common key 
array_multisort($price, SORT_ASC, $fruits); 

OK , 得到它了!然后$fruits[]数组正确排序price值。
好了,下面是我的一些顾虑:

  • 至于我以前学过,我们不应该添加/使用任何附加/定制代码使用排序Machinism。 (相反,我相信我们应该使用纯内置方法。)
  • 在这里,我怀疑它的性能,因为它内部有预定制的foreach循环,这可能极大地降低了速度,同时我们拥有真正庞大的阵列。 (像我现在有)

所以现在我要问的是:

  • 是否PHP有任何纯粹的方法来实现这个东西?
  • [或]我们不能纠正这个多维数组排序问题只使用 /从一些PHP纯内置,数组排序方法(例如:sort(),usort(), asort(),array_multisort()等等。)?

回答

2
usort ($fruits, function($a, $b) { return $a['price'] > $b['price'] ? 1 : ($a['price'] == $b['price'] ? 0 : -1); }); 
+0

哇,完美的作品! –

0

usort听起来就像你在找什么:

<? 
$fruits[] = array("name"=>"orange", "price"=>3, "code"=>"A45"); 
$fruits[] = array("name"=>"apple", "price"=>2, "code"=>"W71"); 
$fruits[] = array("name"=>"grape", "price"=>4, "code"=>"G11"); 
usort($fruits, function($a, $b){return $a['price'] - $b['price'];}); 
print_r($fruits); 
?> 

生产:

Array 
(
    [0] => Array 
     (
      [name] => apple 
      [price] => 2 
      [code] => W71 
     ) 

    [1] => Array 
     (
      [name] => orange 
      [price] => 3 
      [code] => A45 
     ) 

    [2] => Array 
     (
      [name] => grape 
      [price] => 4 
      [code] => G11 
     ) 

)