我正在使用 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 或名称的数组,例如添加一个名为id
and的属性,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] 删除。
我来说两句