为了账号安全,请及时绑定邮箱和手机立即绑定

PHP array_multisort 未按预期对双多维数组进行排序

PHP array_multisort 未按预期对双多维数组进行排序

PHP
HUWWW 2023-07-08 21:58:39
这是我的代码。<?php$data['test1'][0] = array('total' => 67, 'edition' => 2, 'pkg_version' => "2.5.0" );$data['test1'][1] = array('total' => 67, 'edition' => 2, 'pkg_version' => "0.1.0" );$data['test1'][2] = array('total' => 67, 'edition' => 2, 'pkg_version' => "0.3.0" );$data['test2'][0] = array('total' => 86, 'edition' => 1, 'pkg_version' => "1.5.0");$data['test2'][1] = array('total' => 85, 'edition' => 6, 'pkg_version' => "0.53.0");$data['test2'][2] = array('total' => 98, 'edition' => 2, 'pkg_version' => "0.3");$data['test2'][3] = array('total' => 98, 'edition' => 2, 'pkg_version' => "0.2");$data['test3'][0] = array('total' => 60, 'edition' => 6, 'pkg_version' => "0.3");$data['test3'][1] = array('total' => 60, 'edition' => 7, 'pkg_version' => "0.1.1");$data['test3'][2] = array('total' => 60, 'edition' => 7, 'pkg_version' => "0.25");foreach ($data as $row) {    foreach ($row as $k){        foreach ($k as $key => $value){                ${$key}[]  = $value;         }     }  }array_multisort($pkg_version, SORT_DESC, $data);echo "<pre>";print_r($data);echo "</pre>";?>我正在尝试使用 array_multisort 函数对多维数组进行排序我想对要订购的每个元素的 pkg_version 进行排序退回的订单不符合预期。不确定,我误解了如何array_multisort 有效吗?或者我的代码是错误的。你们能帮我吗?我试着解决这个问题很久了。这是一个相当复杂的维度数组。这是运行上面代码后的结果。Array(    [test1] => Array        (            [0] => Array                (                    [total] => 67                    [edition] => 2                    [pkg_version] => 2.5.0                )            [1] => Array                (                    [toal] => 67                    [edition] => 2                    [pkg_version] => 0.1.0                )            [2] => Array                (                    [total] => 67                    [edition] => 2                    [pkg_version] => 0.3.0                )        )    [test2] => Array        (            [0] => Array                (                    [total] => 86                    [edition] => 1                    [pkg_version] => 1.5.0                ))
查看完整描述

1 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

您可以循环数组并使用usort()

<?php


$data['test1'][0] = array('total' => 67, 'edition' => 2, 'pkg_version' => "2.5.0" );

$data['test1'][1] = array('total' => 67, 'edition' => 2, 'pkg_version' => "0.1.0" );

$data['test1'][2] = array('total' => 67, 'edition' => 2, 'pkg_version' => "0.3.0" );

$data['test2'][0] = array('total' => 86, 'edition' => 1, 'pkg_version' => "1.5.0");

$data['test2'][1] = array('total' => 85, 'edition' => 6, 'pkg_version' => "0.53.0");

$data['test2'][2] = array('total' => 98, 'edition' => 2, 'pkg_version' => "0.3");

$data['test2'][3] = array('total' => 98, 'edition' => 2, 'pkg_version' => "0.2");

$data['test3'][0] = array('total' => 60, 'edition' => 6, 'pkg_version' => "0.3");

$data['test3'][1] = array('total' => 60, 'edition' => 7, 'pkg_version' => "0.1.1");

$data['test3'][2] = array('total' => 60, 'edition' => 7, 'pkg_version' => "0.25");


// use a reference to the sub array

//                |

//                |

//                v

foreach ($data as &$row)

{

    usort($row, function($a, $b)

                {

                    // make a desc sort by comparing $b against $a instead of $a against $b

                    return strcmp($b['pkg_version'], $a['pkg_version']);

                });

}


var_dump($data);

这输出:


array(3) {

  ["test1"]=>

  array(3) {

    [0]=>

    array(3) {

      ["total"]=>

      int(67)

      ["edition"]=>

      int(2)

      ["pkg_version"]=>

      string(5) "2.5.0"

    }

    [1]=>

    array(3) {

      ["total"]=>

      int(67)

      ["edition"]=>

      int(2)

      ["pkg_version"]=>

      string(5) "0.3.0"

    }

    [2]=>

    array(3) {

      ["total"]=>

      int(67)

      ["edition"]=>

      int(2)

      ["pkg_version"]=>

      string(5) "0.1.0"

    }

  }

  ["test2"]=>

  array(4) {

    [0]=>

    array(3) {

      ["total"]=>

      int(86)

      ["edition"]=>

      int(1)

      ["pkg_version"]=>

      string(5) "1.5.0"

    }

    [1]=>

    array(3) {

      ["total"]=>

      int(85)

      ["edition"]=>

      int(6)

      ["pkg_version"]=>

      string(6) "0.53.0"

    }

    [2]=>

    array(3) {

      ["total"]=>

      int(98)

      ["edition"]=>

      int(2)

      ["pkg_version"]=>

      string(3) "0.3"

    }

    [3]=>

    array(3) {

      ["total"]=>

      int(98)

      ["edition"]=>

      int(2)

      ["pkg_version"]=>

      string(3) "0.2"

    }

  }

  ["test3"]=>

  &array(3) {

    [0]=>

    array(3) {

      ["total"]=>

      int(60)

      ["edition"]=>

      int(6)

      ["pkg_version"]=>

      string(3) "0.3"

    }

    [1]=>

    array(3) {

      ["total"]=>

      int(60)

      ["edition"]=>

      int(7)

      ["pkg_version"]=>

      string(4) "0.25"

    }

    [2]=>

    array(3) {

      ["total"]=>

      int(60)

      ["edition"]=>

      int(7)

      ["pkg_version"]=>

      string(5) "0.1.1"

    }

  }

}

请注意,在最后一个数组中, version0.3高于 version 0.25。由于这是您预期输出中的顺序,因此我将其保留为原样,但如果不是,您可以使用 , 代替strcmp(),version_compare()这将为 提供以下输出$data['test3']:


  ["test3"]=>

  &array(3) {

    [0]=>

    array(3) {

      ["total"]=>

      int(60)

      ["edition"]=>

      int(7)

      ["pkg_version"]=>

      string(4) "0.25"

    }

    [1]=>

    array(3) {

      ["total"]=>

      int(60)

      ["edition"]=>

      int(6)

      ["pkg_version"]=>

      string(3) "0.3"

    }

    [2]=>

    array(3) {

      ["total"]=>

      int(60)

      ["edition"]=>

      int(7)

      ["pkg_version"]=>

      string(5) "0.1.1"

    }

  }

}


查看完整回答
反对 回复 2023-07-08
  • 1 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信