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 或 2,具体取决于它的类别在。

我认为我只是循环查询(它是 event_date 的 DESC),我走在正确的轨道上,但这不会让我检查单个条目类别并根据它进行填充。

谁能指出我正确的方向?

4

2 回答 2

0

您可以跟踪数组中的日期。然后,当您循环浏览您的事件时,将该日期加一。在循环结束时,您将知道每个日期有多少事件。然后,您需要循环并添加您的多记录。您也可以只使用日期数组作为循环。

$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 回答
0

我们是否每次都假设一个排序的多维数组(通过升序 [event_date])?如果是这样,您可以:

function multi_counter($big_array, $sorted, $storage){
$multi_count=0; // since by default there are no multiples
$multi_items=array(0); // starting at the beginning of the array
$length = count($big_array); // counting before loop
for($i=0;$i<$length-1;$i++){ // the -1 is so we don't get undefined index on last run
    if($big_array[$i][$sorted]===$big_array[$i+1][$sorted]){ //testing for similarity
        $multi_items[]=$i+1;        // adding the multi found to temp storage
        $multi_count++;             // adding to # of multis
// CALL A FUNCTION HERE SINCE THEY MATCH???
    }else{  
        foreach($multi_items as $key=>$multi){  // if not similar, go back and assign stored multis
            $big_array[$multi][$storage]=$multi_count;  // assigning stored vals
        }
        $multi_count=0; // resetting counter
        $multi_items=array($i+1); // resetting to next item
    }
}
foreach($multi_items as $key=>$multi){  // forcing assign at end of loop
    $big_array[$multi][$storage]=$multi_count; 
}
return $big_array; // returning the newly modified array

}

你说的是这个吗?您可以插入对我评论过的另一个函数的调用。问题不清楚,但这听起来像您想要的。

该函数解析作为第一个参数给出的数组,检查每个子数组中的第二个参数是否相似,并将它们存储在子数组中的一个键中,该键命名为您为第三个参数放置的任何内容。

于 2012-11-29T00:58:18.113 回答