亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

PHP a multidimensional array sorting problem
滿天的星座
滿天的星座 2017-05-16 13:08:20
0
9
699

This problem is somewhat similar to order by in Mysql. What is needed is to simulate the sorting of different fields in the array.

Suppose there is the following array:

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

Now you need to follow the chinese order in the array. If they are the same, follow the math order. The final result should be the following array:

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

Do you have any different ways to achieve this?

滿天的星座
滿天的星座

reply all(9)
左手右手慢動(dòng)作

This is the version I use myself. How to use it:

$afterSort = getArraySort($beforeSort, 'chinese', 'SORT_ASC', 'math', 'SORT_ASC');
/**
 * 二維數(shù)組排序(數(shù)字索引數(shù)組將重建索引)
 * @param array $arr 需要排序的數(shù)組 二維數(shù)組
 * @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;
    

Print results:

    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)
      }
    }
    
    
大家講道理

You can convert arrays into sets and then process them. The sort method implemented using PHP collections specializes in various complex sorting

PHPzhong

<?php
//Now you need to follow the chinese order in the array. If they are the same, follow the math order. The final result should be the following array:
$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');
$data_chinese = array_column($beforeSort,'chinese');
array_multisort($data_chinese,SORT_ASC,$data_math,SORT_ASC,$beforeSort);
print_r($beforeSort );

我想大聲告訴你
$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);
大家講道理

///Borrowing the answer from the guy upstairs

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

For sorting multi-dimensional arrays, there is an official function that can implement 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 '<pre>';
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($chinese, SORT_ASC, $math, SORT_ASC, $beforeSort);
print_r($beforeSort);

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template