2017-11-12 1 views
0

개체 배열을 반환하는 함수가 있습니다. "이벤트 번호 1"의 첫 번째가되도록 내가 재산 "종료 시각"에 의해 배열을 정렬 할 수있는 방법함수 내에서 속성 값을 기준으로 개체 배열 정렬

Array 
(
    [0] => WP_Post Object 
    (
     [ID] => 14 
     [metadata] => Array 
      (
       [post_title] => Event number 3 
       [starttime] => 24.11.2019 
       [endtime] => 25.11.2019 
      ) 

    ) 

    [1] => WP_Post Object 
    (
     [ID] => 13 
     [metadata] => Array 
      (
       [post_title] => Event number 1 
       [starttime] => 19.1.2017 
       [endtime] => 20.1.2017 
      ) 
    ) 
    [2] => WP_Post Object 
    (
     [ID] => 10 
     [metadata] => Array 
      (
       [post_title] => Event number 2 
       [starttime] => 19.1.2018 
       [endtime] => 20.1.2018 
      ) 

    ) 

) 

이이 지금처럼 객체의 배열을 반환 내 기능

public function myFunction() { 
    $args = [ 
     'post_type' => 'post', 

    ]; 
    $data = \WordPress\Query::get_posts($args); 

    $now = time(); 
    foreach ($data as $key => $datas) { 
    $eventTime = $datas->endtime; 
    $eventTimeStr = strtotime($eventTime); 
    if ($eventTimeStr < $now) { 
     unset($data[$key]); 
    } 
    } 
return $data; 
} 

입니다 목록 및 "이벤트 번호 2"초 등?

myFunction() 내에서 usort-function을 사용해 보았지만 성공하지 못했습니다. myFunction() 외부에서 다른 함수를 만들고 거기에서 $ data-variable에 액세스해야합니까? 그렇다면 어떻게?

myFunction()에서 날짜의 형식을 Unix Timestamp로 지정했습니다. 아마 그것을 사용해야합니까?

+0

* usort-function을 사용하여 시도 * * 코드 표시 – splash58

+0

데이터베이스에서 데이터를 가져 오는 동안 (endtime)까지 주문할 수 있으므로 주문한 데이터로 배열이 채워집니다. 너 그거 해봤 니? –

+0

[개체 필드별로 개체 배열 정렬] 가능한 복제본 (https://stackoverflow.com/questions/4282413/sort-array-of-objects-by-object-fields) – yivi

답변

0

항상 같은 알고리즘을 정렬하는 것은이 같은 복잡한 물건을 정렬, 두 가지 요소를 비교하여 전체 배열을 정렬하는 장면 뒤에 비교 기능을 사용하여, 하나의 기능을 비교 작성하고

주문 거기에 논리를 정의해야합니다
function compare($a, $b) 
{ 
    return strtotime($a->metadata['endtime']) < strtotime($b->metadata['endtime']); 
} 

usort($yourarray, 'compare'); 
+0

감사합니다! 나는 이것으로 나의 문제를 해결할 수 있었다! – AvoQ

+0

환영합니다. 기쁘게 도왔습니다. –

-1

개체 배열을 가져 와서 정렬 된 다른 함수를 만들어야한다고 가정합니다. 몇 가지 간단한 정렬 알고리즘을 사용할 수 있습니다. 또한 endtime에 의해 max 객체를 반환하는 함수를 작성해야합니다.

function sortObjects($objects){ 
    $sorted_array = array(); 
    for($i=0;$i<count($objects);$i++){ 
     $max = getMax($objects); 
     $max_object = $max["object"]; 
     $max_index = $max["index"]; 
     unset($objects[$max_index]); 
     array_push($sorted_array, $max_object); 
    } 
    return $sorted_array; 
} 
function getMax($objects){ 
    $index = 0; 
    $max = $objects[$index]; 

    for($i=1;i<count($objects);$i++){ 
     if(strtotime(str($objects[i]->metadata->endtime))>strtotime(str($max))){ 
      $max = $objects[i]; 
      $index = $i; 
     } 
    } 
    return array("object"=>$max, "index"=>$index); 
} 

개체에 myFunction()을 사용합니다.

$sorted = sortObjects(myfunction()); 
관련 문제