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

Php 通过乘以两个键值对多维关联数组排序,php,sorting,multidimensional-array,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'=&g

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

$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\u multisort
函数,但我需要通过计算面积进行排序。

您可以使用
usort

如果
$a
是第一个,则Usort回调函数预期为-1(负数)。1(正数)如果
$b
为,则应先执行;如果订单无变化,则应先执行
0

例如:
$a
的面积是25,
$b
的面积是10<代码>25-10=15这是一个正数。因此,
usort
将在
$a
之前订购
$b

$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>";

文档:

您可以使用
usort

如果
$a
是第一个,则Usort回调函数预期为-1(负数)。1(正数)如果
$b
为,则应先执行;如果订单无变化,则应先执行
0

例如:
$a
的面积是25,
$b
的面积是10<代码>25-10=15这是一个正数。因此,
usort
将在
$a
之前订购
$b

$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>";

医生:

Oof我用过
usort
来处理这类东西。让我看看我是否还能知道这是怎么回事。编辑Eddie的《忍者》我似乎用了
usort
来处理这类东西。让我看看我是否还能知道这是怎么回事。编辑Eddie的《忍者d》看起来hahaCan你能向我解释一下你在返回语句中做了什么吗?(为什么减法)我得到了它,如果下一个值大于上一个值,它应该返回负数,反之亦然versa@NawazGhori我补充了一个解释。如果您有Qs,请告诉我。:)你能解释一下你在返回语句中做了什么吗?(为什么减法)我得到了它,如果下一个值大于上一个值,它应该返回负数,反之亦然versa@NawazGhori我补充了一个解释。如果您有Qs,请告诉我。:)