PHP Y-m-d H:i:s 날짜를 포함하는 요소별로 다차원 배열 정렬

다음과 같은 어레이가 있습니다.

Array ( [0] => Array
(
[id] => 2
[type] => comment
[text] => hey
[datetime] => 2010-05-15 11:29:45
)
[1] => Array
(
[id] => 3
[type] => status
[text] => oi
[datetime] => 2010-05-26 15:59:53
)
[2] => Array
(
[id] => 4
[type] => status
[text] => yeww
[datetime] => 2010-05-26 16:04:24
)
) 

datetime 요소를 기준으로 정렬/주문하는 방법을 제안할 수 있습니까?



질문에 대한 답변



사용 및 사용자 지정 비교 함수:

function date_compare($a, $b) {
$t1 = strtotime($a['datetime']);
$t2 = strtotime($b['datetime']);
return $t1 - $t2; }
usort($array, 'date_compare'); 

편집: 데이터는 어레이 배열로 구성됩니다.이러한 데이터를 더 잘 구별하기 위해 내부 어레이(데이터) 레코드를 호출하여 데이터가 실제로 레코드 배열이 되도록 합니다.

usort이러한 레코드 중 2개를 지정된 비교 함수에 전달합니다.date_compare()한 번에 한 번에. date_compare그런 다음 추출합니다."datetime"각 레코드의 필드를 UNIX 타임스탬프(정수)로 하여 차분을 반환함으로써 결과가 다음과 같이 됩니다.0두 날짜가 같은 경우 첫 번째 날짜의 경우 양수($a두 번째 인수( )의 경우 값이 크거나 음수입니다.$b)가 더 큽니다. usort()는 이 정보를 사용하여 배열을 정렬합니다.




이거면 될 거야.strtotime을 통해 날짜를 unix 시간으로 변환했습니다.


foreach ($originalArray as $key => $part) {
$sort[$key] = strtotime($part['datetime']);
}
array_multisort($sort, SORT_DESC, $originalArray); 

단일 라인 버전에서는 여러 어레이 방법을 사용합니다.

array_multisort(array_map('strtotime',array_column($originalArray,'datetime')),

SORT_DESC,

$originalArray); 



php7에서 우주선 연산자를 사용할 수 있습니다.

usort($array, function($a, $b) {
return new DateTime($a['datetime']) <=> new DateTime($b['datetime']); }); 



http://us2.php.net/manual/en/function.array-multisort.php 의 세 번째 예를 참조해 주세요.

<?php
$data[] = array('volume' => 67, 'edition' => 2); $data[] = array('volume' => 86, 'edition' => 1); $data[] = array('volume' => 85, 'edition' => 6); $data[] = array('volume' => 98, 'edition' => 2); $data[] = array('volume' => 86, 'edition' => 6); $data[] = array('volume' => 67, 'edition' => 7);
foreach ($data as $key => $row) {
$volume[$key]
= $row['volume'];
$edition[$key] = $row['edition']; }
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?> 

참고로 파서는 unix(1970년 이후 초) 또는 mysql 타임스탬프(YmdHis – 20100526014500)를 사용하는 것이 더 쉬울 것입니다만, 당신의 경우는 차이가 없다고 생각합니다.




$array = Array (
[0] => Array
(
[id] => 2
[type] => comment
[text] => hey
[datetime] => 2010-05-15 11:29:45
)
[1] => Array
(
[id] => 3
[type] => status
[text] => oi
[datetime] => 2010-05-26 15:59:53
)
[2] => Array
(
[id] => 4
[type] => status
[text] => yeww
[datetime] => 2010-05-26 16:04:24
)
);
print_r($array);
$name = 'datetime';
usort($array, function ($a, $b) use(&$name){
return $a[$name] - $b[$name];});
print_r($array);