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,请告诉我。:)