Php 计算多维数组中的重复值并基于该值填充值
我有以下数组:Php 计算多维数组中的重复值并基于该值填充值,php,multidimensional-array,count,duplicates,Php,Multidimensional Array,Count,Duplicates,我有以下数组: 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
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\u date]
的数组,如果有,计算有多少,执行一段特殊的代码(函数可以),并根据输出的内容,根据该条件将[multi]
值设置为1、2或3
基本逻辑是:
检查是否有多个[事件日期]
。如果有,请检查所有匹配重复日期的类别。如果所有日期都是X,则用1填充[multi]
,如果所有日期都是Y,则用2填充,如果日期是X和Y混合的,则用3填充。如果只有一个日期,则根据其所属类别填充1或2
我认为通过循环查询(它是descbyevent_date)我走上了正确的轨道,但这不允许我检查单个条目类别并基于该类别进行填充
有人能给我指出正确的方向吗?你可以在数组中记录日期。然后,当您循环处理事件时,将该日期增加一个。在循环结束时,您将知道每个日期有多少事件。然后,您需要循环并添加您的多记录。也可以将日期数组用作循环
$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;
}
我们是否每次都假设一个排序的多维数组(按升序[事件\日期])? 如果是,你可以:
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
多功能计数器($big\u数组,$sorted,$storage){
$multi_count=0;//因为默认情况下没有倍数
$multi_items=array(0);//从数组的开头开始
$length=count($big_数组);//循环前计数
对于($i=0;$i)您能否在“基本逻辑将是:””一句话之后立即重新措辞/提供有关该段落的更多详细信息?另外,您能否提供您尝试过的代码片段,但不适合您?我非常感谢这段代码。虽然这不是我所需要的,但我能够修改它以实现它。谢谢。