如何在PHP的foreach循环中去除二维数组列的重复值
PHP二维数组按bdate字段去重并排除无效日期
方法1:遍历过程中跟踪已输出的日期
遍历数组时,用临时数组记录已处理过的有效日期,遇到非0000-00-00且未被记录的日期时,执行输出并标记为已处理。
<?php // 示例二维数组 $data = [ ['bdate' => '2024-01-22'], ['bdate' => '0000-00-00'], ['bdate' => '2024-01-22'], ['bdate' => '2024-02-15'], ['bdate' => '0000-00-00'], ['bdate' => '2024-02-15'], ]; $seenDates = []; foreach ($data as $item) { $bdate = $item['bdate']; if ($bdate !== '0000-00-00' && !in_array($bdate, $seenDates)) { // 替换为你的实际输出逻辑,比如echo或存入新数组 echo $bdate . "<br>"; $seenDates[] = $bdate; } } ?>
方法2:先预处理数组再输出
先提取所有bdate字段,过滤无效值后去重,最后遍历结果输出,适合仅需日期值的场景。
<?php $data = [ ['bdate' => '2024-01-22'], ['bdate' => '0000-00-00'], ['bdate' => '2024-01-22'], ['bdate' => '2024-02-15'], ]; // 提取所有bdate字段 $allDates = array_column($data, 'bdate'); // 过滤无效日期 $validDates = array_filter($allDates, fn($date) => $date !== '0000-00-00'); // 去重 $uniqueDates = array_unique($validDates); // 输出结果 foreach ($uniqueDates as $date) { echo $date . "<br>"; } ?>
方法3:保留原数组其他字段的去重
如果需要保留每个唯一日期对应的完整数组项(比如保留第一条/最后一条出现的记录),可以用bdate作为键实现自动去重:
<?php $data = [ ['id' => 1, 'bdate' => '2024-01-22'], ['id' => 2, 'bdate' => '0000-00-00'], ['id' => 3, 'bdate' => '2024-01-22'], ['id' => 4, 'bdate' => '2024-02-15'], ]; // 先过滤含无效日期的数组项 $validItems = array_filter($data, fn($item) => $item['bdate'] !== '0000-00-00'); // 用bdate作为键,自动去重(默认保留最后一条出现的记录) $uniqueItems = array_column($validItems, null, 'bdate'); // 若需保留第一条出现的记录,执行以下两行替换上面的$uniqueItems赋值 // $uniqueItems = array_reverse(array_column($validItems, null, 'bdate')); // $uniqueItems = array_reverse($uniqueItems); // 输出带其他字段的结果 foreach ($uniqueItems as $item) { echo "日期:{$item['bdate']},ID:{$item['id']}<br>"; } ?>
内容的提问来源于stack exchange,提问作者Ginevian
相关产品推荐
相关产品推荐

