Home  >  Article  >  Backend Development  >  Introduction to the method of sorting two-dimensional arrays in PHP while keeping key names unchanged (code example)

Introduction to the method of sorting two-dimensional arrays in PHP while keeping key names unchanged (code example)

不言
不言forward
2019-02-27 09:42:262178browse

This article brings you an introduction to the method of sorting two-dimensional arrays in PHP while keeping the key names unchanged (code examples). It has certain reference value. Friends in need can refer to it. I hope it will be useful to you. helped.

To sort the key names specified in the two-dimensional array, the first thing everyone thinks of is the array_multisort function. I have written an article before about the usage of array_multisort.
Without further ado, let’s look at an example:

ee1e477732f941563dde11c19100b482 array(
        'age' => 22,
        'name' => '鸠摩智'
    ),
    1007 => array(
        'age' => 21,
        'name' => '慕容复'
    ),
    1004 => array(
        'age' => 27,
        'name' => '乔帮主'
    )
);
 

 = array_column(, 'age'(, SORT_ASC, ();

Careful friends will see that the key name has been reset and the key name starts from 0. Obviously this may not be the result we want, then How to keep the key name unchanged?

Let’s look at another example:

$data = array(
=> array(
        'age' => 22,
        'name' => '鸠摩智'
    ),
=> array(
        'age' => 21,
        'name' => '慕容复'
    ),
=> array(
        'age' => 27,
        'name' => '乔帮主'
    )
);
//根据字段age对数组$data进行降序排列
$data = arraySort($data, "age", "desc" );
print_r($data);

/**
 * @desc arraySort php二维数组排序 按照指定的key 对数组进行自然排序
 * @param array $arr 将要排序的数组
 * @param string $keys 指定排序的key
 * @param string $type 排序类型 asc | desc
 * @return array
 */
function arraySort($arr, $keys, $type = 'asc')
{
    $keysvalue = $new_array = array();
    foreach ($arr as $k => $v) {
        $keysvalue[$k] = $v[$keys];
    }

    if ($type == 'asc') {
        natsort($keysvalue);
    }
    if ($type == 'desc') {
        natsort($keysvalue);
        $keysvalue = array_reverse($keysvalue, TRUE); // 将原数组中的元素顺序翻转,如果第二个参数指定为 true,则元素的键名保持不变
    }
    foreach ($keysvalue as $k => $v) {
        $new_array[$k] = $arr[$k];
    }
    return $new_array;
}

Here we can also simplify the arraySort function, and the processing result is the same:

/**
 * @desc arraySort php二维数组排序 按照指定的key 对数组进行自然排序
 * @param array $arr 将要排序的数组
 * @param string $keys 指定排序的key
 * @param string $type 排序类型 asc | desc
 * @return array
 */
function arraySort($arr, $keys, $type = 'asc')
{
    $keysvalue = $new_array = array();
    foreach ($arr as $k => $v) {
        $keysvalue[$k] = $v[$keys];
    }

    $type == 'asc' ? asort($keysvalue) : arsort($keysvalue);
    foreach ($keysvalue as $k => $v) {
        $new_array[$k] = $arr[$k];
    }
    return $new_array;
}

We can see from the above results:

The key name remains unchanged. The implementation principle is very simple. First, take out the key name. , then sort the key names, and then assign values ​​to the corresponding key names to form a new array and return it.
As you can see, here we mainly use several core sorting functions of PHP

asort() sorts the associative array in ascending order by key value.

arsort() sorts the associative array in descending order by key value.

natsort() implements "natural sorting", that is, the sorting method of numbers from 1 to 9, and the sorting method of letters from a to z, with shorter ones given priority. The index of the array is associated with the cell value,
Note: In the natural sorting algorithm, the number 2 is less than the number 10. In computer sorting algorithms, 10 is less than 2 because the first number in "10" is less than 2.

The above is the detailed content of Introduction to the method of sorting two-dimensional arrays in PHP while keeping key names unchanged (code example). For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:cnblogs.com. If there is any infringement, please contact admin@php.cn delete