0

次の配列があります。

Array
(
[0] => Array
    (
        [event_id] => 90
        [event_date] => 2012-11-29
        [multi] => 1
    )

[1] => Array
    (
        [event_id] => 86
        [event_date] => 2012-11-29
        [multi] => 1
    )

[2] => Array
    (
        [event_id] => 52
        [event_date] => 2012-11-30
        [multi] => 0
    )

)

次のコードを使用してオンザフライで生成しています。

        $dates = array();
    $curr_date = array();
    $iteration_date = null;

    foreach ( $query as $q ) {
        $event_id = $q->ID;

        $curr_date['event_id'] = $event_id;
        $curr_date['event_date'] = date('Y-m-d', get_post_meta($event_id, 'event_unix_date', true));


        if ( empty($iteration_date) ) {
            $iteration_date = $curr_date['event_date'];
            $curr_date['multi'] = 1;
        } elseif ( $iteration_date == $curr_date['event_date'] ) {
            $curr_date['multi'] = 1;
        } else {
            $iteration_date = $curr_date['event_date'];
            $curr_date['multi'] = 0;
        }

        array_push($dates, $curr_date);
    }

これは、MySQL データベースの結果に基づいています。

私がやろうとしているの[event_date][multi]:その条件に応じて1、2、または3に。

基本的なロジックは次のとおりです。

が複数あるかどうかを確認します[event_date]。存在する場合は、一致するすべての重複日付のカテゴリを確認します。すべての日付が X の場合[multi]は 1 を入力し、すべての日付が Y の場合は 2 を入力し、日付が X と Y の場合は 3 を入力します。日付が 1 つしかない場合は、カテゴリに応じて 1 または 2 を入力します入っています。

クエリをループするだけで正しい軌道に乗っていると思いましたが (event_date による DESC です)、個々のエントリ カテゴリをチェックしてそれに基づいて入力することはできません。

誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

0

配列内の日付を追跡できます。次に、イベントをループすると、その日付が 1 つ増えます。ループの最後に、各日付にいくつのイベントがあるかがわかります。ただし、ループバックしてマルチレコードを追加する必要があります。日付配列をループアップとして使用することもできます。

$dates = new array();

foreach ( $query as $q ) {
  if(array_key_exists($q['event_date'], $dates)
    $dates[$q['event_date']]++;
  else
    $dates[$q['event_date']] = 1;
}
于 2012-11-28T23:55:55.657 に答える