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)您能否在“基本逻辑将是:””一句话之后立即重新措辞/提供有关该段落的更多详细信息?另外,您能否提供您尝试过的代码片段,但不适合您?我非常感谢这段代码。虽然这不是我所需要的,但我能够修改它以实现它。谢谢。