Home >Backend Development >PHP Problem >How to sort an array in php and keep the key values ​​unchanged

How to sort an array in php and keep the key values ​​unchanged

王林
王林Original
2020-09-28 13:20:405753browse

php method to sort the array and keep the key values ​​unchanged: first we need to take out the key names of the array; then sort the key names; finally assign values ​​according to the corresponding key names to form a new array and return That’s it.

How to sort an array in php and keep the key values ​​unchanged

Implementation code:

(Recommended tutorial: php video tutorial)

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

Output result:

How to sort an array in php and keep the key values ​​unchanged

The key name remains unchanged, and the implementation The 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() 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 remains 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.

Related recommendations: php training

The above is the detailed content of How to sort an array in php and keep the key values ​​unchanged. For more information, please follow other related articles on the PHP Chinese website!

Statement:
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