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

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功能但我需要通过计算区域来排序.

Edd*_*die 5

你可以用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()