如何使用PHP在多维数组中显示重复数据

达山马瓦尼亚

我正在使用 Spout Excel 阅读器从 php 代码中读取 Excel 文件并保存到 PHP 变量中的多维数组中,数组如下所示

$array = [
[
    'id[0]' => 'BX-78',
    'Name[0]' => 'XXX',
    'Address[0]' => 'YUUSATD'
],
[
    'id[1]' => 'BX-79',
    'Name[1]' => 'YYY',
    'Address[1]' => 'DHJSHDJGY'
],
[
    'id[2]' => 'BX-80',
    'Name[2]' => 'ZZZ',
    'Address[2]' => 'DDSDSDA'
]
[
    'id[3]' => 'BX-78',
    'Name[3]' => 'AAA',
    'Address[3]' => 'FSDSDS'
][
    'id[4]' => 'BX-81',
    'Name[4]' => 'XXX',
    'Address[4]' => 'DSDSDSD'
]];

现在我想使用两个密钥上述阵列显示重复数据['id']['name']如果ID重复显示为重复的数据,

  • 如果名称重复,则将该行显示为重复数据 如果两者都是重复的,则再次显示为重复行
  • 否则它是唯一的行。

我曾尝试使用多维数组排序,但它只使用一个键来匹配行中的数据。

foreach ($arrExcelData as $v) {
   if (isset($arrExcelData[$v[0]])) {
       // found duplicate
       continue;
    }
    // remember unique item
    $arrExcelData3[$v[0]] = $v;
}

// if you need a zero-based array, otheriwse work with $_data
$arrExcelData2 = array_values($arrExcelData3);

编辑:预期输出结果:

匹配行:

Id       Name    Address
-------------------------
BX-78    XXX     YUUSATD
BX-78    AAA     DDSDSDA
BX-81    XXX     DSDSDSD`
第四只鸟

如果要列出重复值,我认为第二个匹配FSDSDS的地址应该是因为没有带有 nameAAA和 value 的项目DDSDSDA

BX-78    AAA     FSDSDS

如果是这种情况,您可以做的是首先使用双 foreach 来标记包含重复 id 或名称的数组,例如添加一个名为idand的属性name除非数组本身在第二个循环中。

在这个循环之后,您可以判断哪些数组是重复的。id[0]我没有使用相应的索引 0 ,而是使用了reset 和 next ,因此它与这些索引无关。

要获得过滤结果,您可以使用array_reduce检查数组键并取消设置它们。

例如:

foreach ($array as $index => $a) {
    foreach ($array as $v) {
        if ($v === $a) continue;
        if (reset($v) === reset($a)) $array[$index]["id"] = "duplicate";
        if (next($v) === next($a)) $array[$index]["name"] = "duplicate";
    }
}

$array = array_reduce($array, function($carry, $item) {
    if (array_key_exists("id", $item) || array_key_exists("name", $item)) {
        unset($item["id"], $item["name"]);
        $carry[] = $item;
    }
    return $carry;
}, []);

print_r($array);

结果

Array
(
    [0] => Array
        (
            [id[0]] => BX-78
            [Name[0]] => XXX
            [Address[0]] => YUUSATD
        )

    [1] => Array
        (
            [id[3]] => BX-78
            [Name[3]] => AAA
            [Address[3]] => FSDSDS
        )

    [2] => Array
        (
            [id[4]] => BX-81
            [Name[4]] => XXX
            [Address[4]] => DSDSDSD
        )

)

看一个php 演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

删除多维数组中的重复数据

来自分类Dev

在PHP中删除多维数组中的重复数组

来自分类Dev

PHP删除多维数组中的重复数组

来自分类Dev

使用php收集数组中的重复数据

来自分类Dev

重复数组中的数据如何过滤

来自分类Dev

多维数组值的重复数据删除

来自分类Dev

在PHP中重复数组

来自分类Dev

如何在PHP中使用foreach只显示一次重复数据?

来自分类Dev

如何从PDO数组结果中删除重复数据

来自分类Dev

如何删除数组中的重复数据?

来自分类Dev

如何将重复数据删除到数组中

来自分类Dev

如何使用PHP多维数组中的MySQL数据

来自分类Dev

通过键值从多维数组中删除重复数组

来自分类Dev

使用PHP解析多维数组中的数据

来自分类Dev

如何使用PHP从多维数组中的重复值中获取一个值?

来自分类Dev

如何在php中获取重复的多维数组

来自分类Dev

如何防止SQL中的重复数据

来自分类Dev

如何从GridView中删除重复数据?

来自分类Dev

如何检查我的数据存储区中的重复数据并显示错误?

来自分类Dev

如何消除下拉列表中显示的重复数据?在ASP.net中的FormView中?

来自分类Dev

从多维php数组中删除重复项

来自分类Dev

PHP多维数组中的多个重复值

来自分类Dev

PHP如果在该字段中重复数据,则显示一次

来自分类Dev

使用PHP和MySQL从数据库中获取数据时,无法避免重复数据

来自分类Dev

php在数组对象中获取一次重复数据

来自分类Dev

ViewPager显示重复数据

来自分类Dev

如何反转多维数组中的重复值

来自分类Dev

如何摆脱多维数组中的重复值

来自分类Dev

如何从多维数组中删除重复条目?