You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:42:41