2017-11-12 5 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タイムスタンプにフォーマットしました。私はおそらくそれを使用する必要がありますか?

+0

* usort-function *を使用してみました* - コードを表示 – splash58

+0

データベースからデータを取得する際に(endtime)注文することができますので、配列はこの順序付けられたデータで埋められます。あなたはそれを試しましたか? –

+0

[オブジェクトフィールドによるオブジェクトの配列の並べ替え]の可能な複製(https://stackoverflow.com/questions/4282413/sort-array-of-objects-by-object-fields) – yivi

答えて

0

いつものように、このアルゴリズムは、2つの要素を比較することによって、全体の配列をソートするシーンの背後に比較関数を使用して並べ替え、このように複雑なものをソートするために、1の比較機能を記述しなければならないと

を注文するためにそこにロジックを定義
+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()); 
関連する問題