>  기사  >  백엔드 개발  >  PHP의 2차원 배열 정렬 문제에 대한 자세한 설명

PHP의 2차원 배열 정렬 문제에 대한 자세한 설명

高洛峰
高洛峰원래의
2016-12-22 11:34:471239검색

PHP의 2차원 배열 정렬의 경우 PHP 내장 함수 uasort()를 사용할 수 있습니다.

예 1:

사용자 정의 비교 함수를 사용하여 값 정렬 ​​배열에 넣어 인덱스를 유지한다 관련

콜백 함수는 다음과 같다. 참고로 콜백 함수의 반환 값이 음수이거나 false인 경우 콜백 함수의 첫 번째 매개변수가 두 번째 매개변수가 먼저 오고 두 번째 매개변수가 마지막에 배열됩니다.

$person = array(
  array('num'=>'001','id'=>6,'name'=>'zhangsan','age'=>21),
  array('num'=>'001','id'=>7,'name'=>'ahangsan','age'=>23),
  array('num'=>'003','id'=>1,'name'=>'bhangsan','age'=>23),
  array('num'=>'001','id'=>3,'name'=>'dhangsan','age'=>23),
);
//负数或者false表示第一个参数应该在前
function sort_by_name($x,$y){
  return strcasecmp($x['name'],$y['name']);
}


은 다음과 같이 사용됩니다.

uasort($person,'sort_by_name');

다음은 참고 및 인터뷰용 2차원 배열 정렬 방법:

//$array 要排序的数组
//$row  排序依据列
//$type 排序类型[asc or desc]
//return 排好序的数组
function array_sort($array,$row,$type){
  $array_temp = array();
  foreach($array as $v){
    $array_temp[$v[$row]] = $v;
  }
  if($type == 'asc'){
    ksort($array_temp);
  }elseif($type='desc'){
    krsort($array_temp);
  }else{
  }
  return $array_temp;
}


예 2:

1차원 배열 정렬은 상대적으로 간단한 asort 및 ksort와 같은 일부 방법을 사용하여 수행할 수 있습니다. 2차원 배열의 정렬을 어떻게 구현하나요? array_multisort 및 usort를 사용하면

을 얻을 수 있습니다. 예를 들어 다음 배열은

코드는 다음과 같습니다.

$users = array(
  array('name' => 'tom', 'age' => 20)
  , array('name' => 'anny', 'age' => 18)
  , array('name' => 'jack', 'age' => 22)
);

작은 것부터 큰 것까지 연령별로 정렬할 수 있으면 좋겠습니다. 저자는 두 가지 방법을 정리하여 모두에게 공유했습니다.

1. array_multisort를 사용하세요

이 방법을 사용하면 나이를 추출해서 1차원 배열로 저장한 후 정리해야 합니다. 나이순으로 오름차순. 구체적인 코드는 다음과 같습니다.

코드는 다음과 같습니다.

$ages = array();
foreach ($users as $user) {
  $ages[] = $user['age'];
}
array_multisort($ages, SORT_ASC, $users);


실행 후 $ users는 정렬된 배열입니다. 예, 인쇄하여 살펴볼 수 있습니다. 먼저 나이를 기준으로 오름차순으로 정렬한 후 이름을 기준으로 오름차순으로 정렬해야 하는 경우 방법은 위와 동일합니다. 즉, 추가로 이름 배열을 추출하면 다음과 같습니다.

코드는 다음과 같습니다.

array_multisort($ages, SORT_ASC, $names, SORT_ASC, $users);

2. usort

이 방법을 사용하면 가장 큰 장점은 좀 더 복잡한 정렬 방법을 사용자 정의합니다. 예를 들어 이름 길이를 기준으로 내림차순으로 정렬합니다.

코드는 다음과 같습니다.

usort($users, function($a, $b) {
      $al = strlen($a['name']);
      $bl = strlen($b['name']);
      if ($al == $bl)
        return 0;
      return ($al > $bl) ? -1 : 1;
    });

여기서는 익명 함수가 사용되며 추출이 가능합니다. 필요한 경우 별도로. 그 중 $a, $b는 $users 배열 아래의 요소로 이해하면 name 값을 직접 인덱싱하고 길이를 계산한 후 길이를 비교할 수 있습니다.


========================================== == =========================

그런데 PHP 정렬의 몇 가지 기능은 다음과 같습니다

sort for arrays 정렬은 일반적으로 1차원 인덱스 배열에 적용되며 인덱스를 유지하지 않습니다.

rsort는 배열을 역순으로 정렬합니다.

asort와 동일합니다. 배열을 정렬하고 인덱스 관계를 유지하여 값을 정렬합니다. 일반적으로 적용 가능 1차원 배열의 경우 인덱스 관계를 유지

arsort 배열을 역으로 정렬하고 인덱스 관계를 asort 사용과 일치하게 유지

ksort 키 이름으로 배열 정렬

krsort 배열 정렬 키 이름으로 역정렬

2차원 배열 정렬 문제에 대한 자세한 설명 PHP 및 관련 기사에서는 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.