Naw*_*ori 1 php sorting multidimensional-array
我有一个如下所示的数组:
$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)
);
Run Code Online (Sandbox Code Playgroud)
我想按升序对它进行排序,方法是通过乘以每个数组项的高度和长度(字符串值)来计算面积,如下所示
$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)
);
Run Code Online (Sandbox Code Playgroud)
我知道php有array_multisort功能但我需要通过计算区域来排序.
你可以用usort.
Usort回调函数期望,如果$a是第一个,则为-1(负数).1(正数)如果$b应该先行,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>";
Run Code Online (Sandbox Code Playgroud)
这将导致:
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
)
)
Run Code Online (Sandbox Code Playgroud)
Doc:usort()