PHP 一个多维数组排序的问题
滿天的星座
滿天的星座 2017-05-16 13:08:20
0
9
543

这个问题有点类似 Mysql 中 order by ,需要的就是在数组中模拟对不同字段的排序。

假如有以下数组:

$beforeSort = [ "0" => ["name" => "张三", "english" => 80, "chinese" => 60, "math" => 50 ], "1" => ["name" => "李四", "english" => 50, "chinese" => 60, "math" => 70 ], "2" => ["name" => "老王", "english" => 30, "chinese" => 50, "math" => 80 ], ];

现在需要在数组中按照chinese顺序,假如有相同,就按math顺序,最后得到的应该是如下的数组:

$afterSort = [ "2" => ["name" => "老王", "english" => 30, "chinese" => 50, "math" => 80 ], "0" => ["name" => "张三", "english" => 80, "chinese" => 60, "math" => 50 ], "1" => ["name" => "李四", "english" => 50, "chinese" => 60, "math" => 70 ], ];

请问大家有什么不同的方法可以实现?

滿天的星座
滿天的星座

membalas semua (9)
左手右手慢动作

Ini adalah versi yang saya gunakan sendiri Cara menggunakannya:

$afterSort = getArraySort($beforeSort, 'chinese', 'SORT_ASC', 'math', 'SORT_ASC');
/** * 二维数组排序(数字索引数组将重建索引) * @param array $arr 需要排序的数组 二维数组 * @param string $arg1 排序的键名或字段名 * @param string $arg2 排序的顺序 SORT_ASC或SORT_DESC * @param string $arg3 排序的方法 SORT_REGULAR * @return array */ function getArraySort($arr, $arg1, $arg2 = "SORT_ASC", $arg3 = "SORT_REGULAR") { if (!is_array($arr) || !$arr) { return $arr; } $argcount = func_num_args(); for ($i = 1; $i < $argcount; $i++) { $arg = func_get_arg($i); if (!preg_match("/SORT_(.*)/i", $arg)) { $keynamelist[] = $arg; $sortrule[] = '$' . $arg; } else { $sortrule[] = $arg; } } foreach ($arr AS $key => $info) { foreach ($keynamelist AS $keyname) { ${$keyname}[$key] = $info[$keyname]; } } $evalstring = 'array_multisort(' . join(",", $sortrule) . ',$arr);'; eval($evalstring); return $arr; }
    迷茫
    $beforeSort = [ "0" => ["name" => "张三", "english" => 80, "chinese" => 60, "math" => 50 ], "1" => ["name" => "李四", "english" => 50, "chinese" => 60, "math" => 70 ], "2" => ["name" => "老王", "english" => 30, "chinese" => 50, "math" => 80 ], ]; $arr = array(); foreach($beforeSort as $value) { $arr[$value['chinese']][$value['math']] = $value; } sort($arr); $result = array(); foreach($arr as $val) { sort($val); foreach($val as $vo) { $result[] = $vo; } } var_dump($result);die;

    Cetak hasil:

    array(3) { [0]=> array(4) { ["name"]=> string(6) "老王" ["english"]=> int(30) ["chinese"]=> int(50) ["math"]=> int(80) } [1]=> array(4) { ["name"]=> string(6) "张三" ["english"]=> int(80) ["chinese"]=> int(60) ["math"]=> int(50) } [2]=> array(4) { ["name"]=> string(6) "李四" ["english"]=> int(50) ["chinese"]=> int(60) ["math"]=> int(70) } }
      大家讲道理

      Anda boleh menukar tatasusunan kepada set dan kemudian memprosesnya. Kaedah isihan yang dilaksanakan menggunakan koleksi PHP mengkhususkan diri dalam pelbagai pengisihan kompleks

        PHPzhong

        //Sekarang anda perlu mengikut susunan bahasa Cina dalam tatasusunan Jika ia adalah sama, ikut susunan matematik Hasil akhir mestilah tatasusunan berikut:
        $beforeSort = [

        "0" => ["name" => "张三", "english" => 80, "chinese" => 60, "math" => 50 ], "1" => ["name" => "李四", "english" => 50, "chinese" => 60, "math" => 70 ], "2" => ["name" => "老王", "english" => 30, "chinese" => 50, "math" => 80 ],

        ];

        $data_math = array_column($beforeSort, 'math'); );

          我想大声告诉你
          $beforeSort = [ "0" => ["name" => "张三", "english" => 80, "chinese" => 60, "math" => 80 ], "1" => ["name" => "李四", "english" => 50, "chinese" => 60, "math" => 70 ], "2" => ["name" => "老王", "english" => 30, "chinese" => 50, "math" => 80 ], ]; usort($beforeSort, function($a, $b) { return [$a['chinese'], $a['math']] <=> [$b['chinese'], $b['math']]; }); var_dump($beforeSort);
            大家讲道理

            ///Meminjam jawapan dari lelaki di tingkat atas

            usort($beforeSort, function ($a, $b) { return [$a['chinese'], $b['math']] <=> [$b['chinese'], $a['math']]; });
              某草草

              Untuk menyusun tatasusunan berbilang dimensi, terdapat fungsi rasmi yang boleh melaksanakan array_multisort

                伊谢尔伦
                $beforeSort = [ "0" => ["name" => "张三", "english" => 80, "chinese" => 60, "math" => 80 ], "1" => ["name" => "李四", "english" => 50, "chinese" => 60, "math" => 70 ], "2" => ["name" => "老王", "english" => 30, "chinese" => 50, "math" => 80 ] ]; foreach( $beforeSort as $key => $value ) { $chinese[$key] = $value['chinese']; $math[$key] = $value['math']; } array_multisort( $chinese, SORT_ASC, $math, SORT_DESC, $beforeSort ); echo '
                '; print_r($beforeSort);
                  Peter_Zhu

                  $beforeSort = [

                  "0" => ["name" => "张三", "english" => 80, "chinese" => 60, "math" => 50 ], "1" => ["name" => "李四", "english" => 50, "chinese" => 60, "math" => 70 ], "2" => ["name" => "老王", "english" => 30, "chinese" => 50, "math" => 80 ],

                  ];

                  foreach ($beforeSort as $key => $value) {

                  $chinese[$key] = $value['chinese']; $math[$key] = $value['math'];

                  }
                  array_multisort($cina, SORT_ASC, $math, SORT_ASC, $beforeSort);
                  print_r($beforeSort);

                    Muat turun terkini
                    Lagi>
                    kesan web
                    Kod sumber laman web
                    Bahan laman web
                    Templat hujung hadapan
                    Tentang kita Penafian Sitemap
                    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!