通过乘以两个键值对多维关联数组进行排序



我有一个数组,如下所示:

$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((

最新更新