>  기사  >  백엔드 개발  >  키 이름을 변경하지 않고 PHP에서 2차원 배열을 정렬하는 방법

키 이름을 변경하지 않고 PHP에서 2차원 배열을 정렬하는 방법

coldplay.xixi
coldplay.xixi앞으로
2020-08-11 16:21:112673검색

키 이름을 변경하지 않고 PHP에서 2차원 배열을 정렬하는 방법

지정된 키 이름으로 2차원 배열을 정렬하려면 모두가 가장 먼저 생각하는 것은 array_multisort 함수입니다. 이전에 array_multisort의 사용법에 대한 기사를 쓴 적이 있습니다.
더 이상 고민하지 않고 예를 살펴보겠습니다.

<?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, ();

조심성 있는 친구들은 키 이름이 재설정되어 0부터 시작한다는 것을 알게 될 것입니다. 분명히 이것은 우리가 원하는 결과가 아닐 수도 있는데, 키 이름을 변경하지 않고 유지하는 방법은 무엇일까요?

다른 예를 살펴보겠습니다.

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

여기서 arraySort 함수도 단순화할 수 있으며 처리 결과는 동일합니다.

/**
 * @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;
}

위 결과에서 볼 수 있는 것은 다음과 같습니다.

키 이름은 변경되지 않고 그대로 유지됩니다. 구현 원리는 매우 간단합니다. 먼저 키 이름을 꺼낸 다음 키 이름을 정렬한 다음 해당 키 이름에 값을 할당하여 새 배열을 구성하고 반환합니다.
보시다시피 여기서는 주로 php

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

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

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

의 여러 핵심 정렬 기능을 사용합니다. 관련 학습 권장사항: php 프로그래밍(동영상)

위 내용은 키 이름을 변경하지 않고 PHP에서 2차원 배열을 정렬하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제