Home  >  Article  >  Backend Development  >  How to sort two-dimensional arrays in PHP while keeping key names unchanged

How to sort two-dimensional arrays in PHP while keeping key names unchanged

coldplay.xixi
coldplay.xixiforward
2020-08-11 16:21:112701browse

How to sort two-dimensional arrays in PHP while keeping key names unchanged

To sort the key names specified in the two-dimensional array, the first thing that 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(
        &#39;age&#39; => 22,
        &#39;name&#39; => &#39;鸠摩智&#39;
    ),
    1007 => array(
        &#39;age&#39; => 21,
        &#39;name&#39; => &#39;慕容复&#39;
    ),
    1004 => array(
        &#39;age&#39; => 27,
        &#39;name&#39; => &#39;乔帮主&#39;
    )
);
 

 = array_column(, &#39;age&#39;(, 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(    1001 => array(        &#39;age&#39; => 22,
        &#39;name&#39; => &#39;鸠摩智&#39;
    ),
    1007 => array(        &#39;age&#39; => 21,
        &#39;name&#39; => &#39;慕容复&#39;
    ),
    1004 => 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;
}

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;
}

From the above results we see:

The key names remain unchanged. The implementation principle is very simple. First, take out the key names, 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() 对关联数组按照键值进行升序排序。

arsort()对关联数组按照键值进行降序排序。

natsort() 实现了“自然排序”,即数字从 1 到 9 的排序方法,字母从 a 到 z 的排序方法,短的优先。数组的索引与单元值保持关联,
注意:在自然排序算法中,数字 2 小于 数字 10。在计算机排序算法中,10 小于 2,因为 "10" 中的第一个数字小于 2。

Related learning recommendations: php programming (video)

The above is the detailed content of How to sort two-dimensional arrays in PHP while keeping key names unchanged. 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