我有以下数组:
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,具体取决于它所在的类别。
我认为通过循环遍历查询(它是DESC by event_date)我走在正确的轨道上,但这不会让我检查单个条目类别并根据它填充。
有人能指出我正确的方向吗?
答案 0 :(得分: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;
}
答案 1 :(得分: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
}
这就是你在说什么?你可以在我评论过的另一个函数中插入一个调用。问题不清楚,但这听起来像是你想要的。
该函数解析作为第一个参数给出的数组,检查每个子数组中第二个参数是否相似,并将它们存储在一个名为你为第三个参数放置的键中的子数组中。