可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
What I'm trying to do is sort a multi-dimensional array that contains decimal values. From what I've tested, floats are having trouble being ordered properly.
Array ( [0] => Array ( [company] => Ebay [weight] => 4.6 ) [1] => Array ( [company] => Ebay [weight] => 1.7 ) [2] => Array ( [company] => Ebay [weight] => 3.7 ) ) usort($array, 'order_by_weight'); // Sorts DESC highest first function order_by_weight($a, $b) { return $b['weight'] - $a['weight']; }
What is the best way to sort these numbers in descending?
回答1:
$arr = array( array('company' => 'A', 'weight' => 4.6), array('company' => 'B', 'weight' => 1.7), array('company' => 'C', 'weight' => 3.7), ); usort($arr, 'order_by_weight'); function order_by_weight($a, $b) { return $b['weight'] > $a['weight'] ? 1 : -1; } var_dump($arr);
PS: it's not a rocket science - this exact "trick" is used as the first example at http://php.net/usort
回答2:
You can do this with anonymous function in just one line
$arr = array( array('company' => 'A', 'weight' => 4.6), array('company' => 'B', 'weight' => 1.7), array('company' => 'C', 'weight' => 3.7), ); usort($arr, function($a, $b) { return $b['weight'] > $a['weight'] ;}); print_r($arr);
Hope this helps :)
回答3:
You can sort the array using array_multisort, altough, this is often used to sort on multiple array values instead of one.
echo ""; $a = array( array('company' => 'ebay', 'weight' => 4.6), array('company' => 'ebay', 'weight' => 1.7), array('company' => 'ebay', 'weight' => 3.7), array('company' => 'ebay', 'weight' => 2.7), array('company' => 'ebay', 'weight' => 9.7), array('company' => 'ebay', 'weight' => 0.7), ); $company = array(); $weight = array(); foreach($a as $key=>$val) { array_push($company, $val['company']); array_push($weight, $val['weight']); } array_multisort($weight, SORT_ASC, $a); print_r($a);
回答4:
As sorting algo here is good example for sort multi dimension array without using any more inbuilt php function
$multiarr = array('0'=>array( "hashtag" => "a7e87329b5eab8578f4f1098a152d6f4", "title" => "Flower", "order" => 3), '1' => array( 'hashtag' => "b24ce0cd392a5b0b8dedc66c25213594", "title" => "Free", "order" => 2), '2' => array('hashtag' => 'e7d31fc0602fb2ede144d18cdffd816b', 'title' => 'Ready', 'order' => 1 ));
sorting function :
function multisort (&$array, $key) { $valsort=array(); $ret=array(); reset($array); foreach ($array as $ii => $va) { $valsort[$ii]=$va[$key]; } asort($valsort); foreach ($valsort as $ii => $va) { $ret[$ii]=$array[$ii]; } $array=$ret;
}
multisort($multiarr,"order")enter code here
: output :
Array ( [2] => Array ( [hashtag] => e7d31fc0602fb2ede144d18cdffd816b [title] => Ready [order] => 1 ) [1] => Array ( [hashtag] => b24ce0cd392a5b0b8dedc66c25213594 [title] => Free [order] => 2 ) [0] => Array ( [hashtag] => a7e87329b5eab8578f4f1098a152d6f4 [title] => Flower [order] => 3 )
)