代码之家  ›  专栏  ›  技术社区  ›  Nawaz Ghori

用两个键值相乘对多维关联数组排序

  •  1
  • Nawaz Ghori  · 技术社区  · 8 年前

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

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

    1 回复  |  直到 8 年前
        1
  •  5
  •   Eddie    8 年前

    你可以用 usort .

    usort回调函数需要-1(负数),如果 $a 是第一个。1(正数)如果 $b 是应该先走然后 0 如果订单没有变化。

    例子: 面积 $A 25岁 美元 是10。 25-10 = 15 这是一个正数。所以 使用权 意志命令 美元 领先 $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
            )
    
    )
    

    Doc: usort()

    推荐文章