检查foreach

时间:2016-06-14 13:49:17

标签: php mysql

我有一个"事件" MySQL中的表: EventsDate(' ID''事件''起始日期'' END_DATE&#39)

我想检查多个事件是否具有相同的开始日期,以便在我的HTML模板中以不同方式显示它。 我的SQL请求是: SELECT * FROM EVENTSDATE where event='$id' and start_date>='$today' order by start_date asc

现在我的foreach:

foreach ($upcomingDates as $value) { //$upcoming is the array with my sql request

        }

我该怎么说:"如果你发现两行具有相同的start_date,则回显一下"

5 个答案:

答案 0 :(得分:1)

您可以在for循环之前创建一个空数组,并将每个值作为键添加。然后,在每次迭代时,您可以检查该数组的键,如下所示:

$values = [];
foreach ($upcomingDates as $value) { //$upcoming is the array with my sql request
    if(isset($values[$value])) //duplicate value found
        //do something here
    $values[$value] = 1;
}

答案 1 :(得分:1)

我的方法略有不同。

// Array to contain all values
$container = array();

// Loop through your existing array
foreach ($upcomingDates as $key => $value) {
    // Check if the value is already in the container array
    // If this is the case, its a duplicate.
    if (array_key_exists($value['start_date'], $container)) {
        $container[$value['start_date']]++;
        echo $value.' is a duplicate with key '.$key;
    }

    // Add each value to the array
    $container[$value['start_date']] = 1;
}

另一种方法是使用array_count_values()

foreach(array_count_values($upcomingDates) as $value => $c) {
    if ($c > 1) {
        echo $value.' is a duplicate';
    }
}

请注意,如果您的$upcomingDates是数组数组,则第二个选项无效。

答案 2 :(得分:0)

由于您要按start_date订购活动:

for ($i = 0, $length = count($upcomingDates); $i < $length; $i++) {
    $date = $upcomingDates[$i];

    if (isset($upcomingDates[$i + 1]) &&
        $upcomingDates[$i + 1]['start_date'] == $date['state_date']) {
        echo 'this and the next date are equal';
    }
}

答案 3 :(得分:0)

试用GROUP BY

看这里:GROUP BY

答案 4 :(得分:0)

如果要查找重复项,则可以直接从数据库中获取 恩。
<Setter Property="BindingGroup" Value="{Binding Path=_recordList}"></Setter>
或者您可以从结果数组中找到重复项 this