값으로 다차원 배열 정렬
PHP값으로 다차원 배열 정렬
이 배열을 "order"키의 값으로 어떻게 정렬 할 수 있습니까? 값은 현재 순차적이지만 항상 같지는 않습니다.
Array
(
[0] => Array
(
[hashtag] => a7e87329b5eab8578f4f1098a152d6f4
[title] => Flower
[order] => 3
)
[1] => Array
(
[hashtag] => b24ce0cd392a5b0b8dedc66c25213594
[title] => Free
[order] => 2
)
[2] => Array
(
[hashtag] => e7d31fc0602fb2ede144d18cdffd816b
[title] => Ready
[order] => 1
)
)
해결법
-
==============================
1.
usort를 사용해보십시오. PHP 5.2 또는 이전 버전을 사용하는 경우 먼저 정렬 함수를 정의해야합니다.
function sortByOrder($a, $b) { return $a['order'] - $b['order']; } usort($myArray, 'sortByOrder');
PHP 5.3부터 익명 함수를 사용할 수 있습니다 :
usort($myArray, function($a, $b) { return $a['order'] - $b['order']; });
마지막으로 PHP 7에서는 "우주선 연산자"를 사용할 수 있습니다 :
usort($myArray, function($a, $b) { return $a['order'] <=> $b['order']; });
이것을 다차원 정렬로 확장하려면, 첫 번째가 0 인 경우 두 번째 / 세 번째 정렬 요소를 참조하십시오. 아래에서 가장 잘 설명합니다. 하위 요소를 정렬 할 때도 사용할 수 있습니다.
usort($myArray, function($a, $b) { $retval = $a['order'] <=> $b['order']; if ($retval == 0) { $retval = $a['suborder'] <=> $b['suborder']; if ($retval == 0) { $retval = $a['details']['subsuborder'] <=> $b['details']['subsuborder']; } } return $retval; });
키 연관을 유지해야하는 경우 uasort ()를 사용하십시오. 매뉴얼의 배열 정렬 함수 비교를 참조하십시오.
-
==============================
2.
function aasort (&$array, $key) { $sorter=array(); $ret=array(); reset($array); foreach ($array as $ii => $va) { $sorter[$ii]=$va[$key]; } asort($sorter); foreach ($sorter as $ii => $va) { $ret[$ii]=$array[$ii]; } $array=$ret; } aasort($your_array,"order");
-
==============================
3.
나는이 함수를 사용한다 :
function array_sort_by_column(&$arr, $col, $dir = SORT_ASC) { $sort_col = array(); foreach ($arr as $key=> $row) { $sort_col[$key] = $row[$col]; } array_multisort($sort_col, $dir, $arr); } array_sort_by_column($array, 'order');
-
==============================
4.
나는 보통 usort를 사용하고, 나 자신의 비교 함수를 전달한다. 이 경우 매우 간단합니다.
function compareOrder($a, $b) { return $a['order'] - $b['order']; } usort($array, 'compareOrder');
-
==============================
5.
$sort = array(); $array_lowercase = array_map('strtolower', $array_to_be_sorted); array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $alphabetically_ordered_array);
이것은 대문자와 소문자 모두를 처리합니다.
-
==============================
6.
"title"키의 값으로 배열을 정렬하려면 다음을 사용하십시오.
uasort($myArray, function($a, $b) { return strcmp($a['title'], $b['title']); });
strcmp는 문자열을 비교합니다.
uasort ()는 배열 키가 정의 된대로 유지합니다.
-
==============================
7.
하자 보자 : PHP는 모든 배열 정렬 시나리오를 제대로 처리 할 수있는 간단한 상자 기능을 가지고 있지 않습니다.
이 루틴은 직관적이며 빠른 디버깅과 유지 보수를 의미합니다.
// automatic population of array $tempArray = array(); $annotations = array(); // ... some code // SQL $sql retrieves result array $result // $row[0] is the ID, but is populated out of order (comes from // multiple selects populating various dimensions for the same DATE // for example while($row = mysql_fetch_array($result)) { $needle = $row[0]; arrayIndexes($needle); // create a parallel array with IDs only $annotations[$needle]['someDimension'] = $row[1]; // whatever } asort($tempArray); foreach ($tempArray as $arrayKey) { $dataInOrder = $annotations[$arrayKey]['someDimension']; // .... more code } function arrayIndexes ($needle) { global $tempArray; if (!in_array($needle,$tempArray)) { array_push($tempArray,$needle); } }
-
==============================
8.
이를 달성하기위한 한 가지 접근 방법은 다음과 같습니다.
$new = [ [ 'hashtag' => 'a7e87329b5eab8578f4f1098a152d6f4', 'title' => 'Flower', 'order' => 3, ], [ 'hashtag' => 'b24ce0cd392a5b0b8dedc66c25213594', 'title' => 'Free', 'order' => 2, ], [ 'hashtag' => 'e7d31fc0602fb2ede144d18cdffd816b', 'title' => 'Ready', 'order' => 1, ], ]; $keys = array_column($new, 'order'); $result = array_multisort($keys, SORT_ASC, $new);
결과:
Array ( [0] => Array ( [hashtag] => e7d31fc0602fb2ede144d18cdffd816b [title] => Ready [order] => 1 ) [1] => Array ( [hashtag] => b24ce0cd392a5b0b8dedc66c25213594 [title] => Free [order] => 2 ) [2] => Array ( [hashtag] => a7e87329b5eab8578f4f1098a152d6f4 [title] => Flower [order] => 3 ) )
from https://stackoverflow.com/questions/2699086/sort-multi-dimensional-array-by-value by cc-by-sa and MIT lisence
'PHP' 카테고리의 다른 글
30 분 후에 어떻게 PHP 세션을 만료 시키나요? (0) | 2018.09.01 |
---|---|
PHP - 스트림을 열지 못했습니다 : 해당 파일이나 디렉토리가 없습니다 (0) | 2018.09.01 |
어떻게 bcrypt를 사용하여 PHP에서 암호를 해싱합니까? (0) | 2018.09.01 |
내 PDO 진술서가 작동하지 않습니다. (0) | 2018.09.01 |
PHP PDO 문이 테이블 또는 열 이름을 매개 변수로 허용 할 수 있습니까? (0) | 2018.09.01 |