Home > Backend Development > PHP Tutorial > 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)

不言
Release: 2023-04-05 12:20:02
forward
2304 people have browsed it

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:

<?php
$data = array(
    1001 => array(
        'age' => 22,
        'name' => '鸠摩智'
    ),
    1007 => array(
        'age' => 21,
        'name' => '慕容复'
    ),
    1004 => array(
        'age' => 27,
        'name' => '乔帮主'
    )
);
Copy after login
 

 = array_column(, &#39;age&#39;(, SORT_ASC, ();
Copy after login

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(
        &#39;age&#39; => 22,
        &#39;name&#39; => &#39;鸠摩智&#39;
    ),
=> array(
        &#39;age&#39; => 21,
        &#39;name&#39; => &#39;慕容复&#39;
    ),
=> array(
        &#39;age&#39; => 27,
        &#39;name&#39; => &#39;乔帮主&#39;
    )
);
//根据字段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 = &#39;asc&#39;)
{
    $keysvalue = $new_array = array();
    foreach ($arr as $k => $v) {
        $keysvalue[$k] = $v[$keys];
    }

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

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 = &#39;asc&#39;)
{
    $keysvalue = $new_array = array();
    foreach ($arr as $k => $v) {
        $keysvalue[$k] = $v[$keys];
    }

    $type == &#39;asc&#39; ? asort($keysvalue) : arsort($keysvalue);
    foreach ($keysvalue as $k => $v) {
        $new_array[$k] = $arr[$k];
    }
    return $new_array;
}
Copy after login

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!

Related labels:
php
source:cnblogs.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template