我有一个数组,如下所示:
$myarray = array(
array('itemid' => '1','height'=>'5','length' => '5'),//area=25(height*length)
array('itemid' => '2','height'=>'2','length' => '5'),//area=10(height*length)
array('itemid' => '3','height'=>'5','length' => '3'),//area=15(height*length)
);
我想通过乘以每个数组项的高度和长度(字符串值(来计算面积,按升序对其进行排序,如下所示
$sortedarray = array(
array('itemid' => '2','height'=>'2','length' => '5'),//area=10(height*length)
array('itemid' => '3','height'=>'5','length' => '3'),//area=15(height*length)
array('itemid' => '1','height'=>'5','length' => '5'),//area=25(height*length)
);
我知道 php 具有array_multisort
功能,但我需要通过计算面积进行排序。
您可以使用usort
.
Usort 回调函数期望,如果$a
是第一个,则为 -1(负数(。 如果$b
是,则 1(正数(应该先行,如果顺序没有变化,则0
。
例:$a
面积为25,$b
为10。25-10 = 15
这是一个正数。所以usort
会提前订购$b
$a
$myarray = array(
array('itemid' => '1','height'=>'5','length' => '5'),//area=25
array('itemid' => '2','height'=>'2','length' => '5'),//area=10
array('itemid' => '3','height'=>'5','length' => '3'),//area=15
);
usort( $myarray, function($a, $b){
return ( $a['height'] * $a['length'] ) - ( $b['height'] * $b['length'] );
});
echo "<pre>";
print_r( $myarray );
echo "</pre>";
这将导致:
Array
(
[0] => Array
(
[itemid] => 1
[height] => 5
[length] => 5
)
[1] => Array
(
[itemid] => 3
[height] => 5
[length] => 3
)
[2] => Array
(
[itemid] => 2
[height] => 2
[length] => 5
)
)
文档: usort((