我在PHP中有一个庞大的多维索引数组,它可能具有成千上万个如下所示的子数组:
Array
(
[0] => Array
(
[0] => James
[1] => Daniel
[2] => f12345
)
[2] => Array
(
[0] => Maria
[1] => Jameson
[2] => f00000
)
[3] => Array
(
[0] => John
[1] => Smith
[2] => f12345
)
)
每个子数组的最后一个值是一个ID作为字符串,我想清理我的数组,使其仅包含给定ID的第一个出现的子数组,并删除具有相同ID的其他数组(删除整个数组子数组,而不仅仅是值)。可能有许多具有相同ID的重复数组,并且可能有许多不同的ID。ID值始终具有相同的键(在此示例中,最后一个键即2)。
预期结果:
Array
(
[0] => Array
(
[0] => James
[1] => Daniel
[2] => f12345
)
[2] => Array
(
[0] => Maria
[1] => Jameson
[2] => f00000
)
)
最快,最高效的方法是什么?
来源是通过网络表单上传的CSV文件,我正在将其变成这样的数组: array_map('str_getcsv', file($tmpName));
最好在读取文件时处理文件中的每条记录,看看是否已经遇到相同的代码。使用
array_map('str_getcsv', file($tmpName));
本身将读取所有文件,然后使用来处理每一行,str_getcsv
然后您可能仍然必须再次处理每一行以检查重复项。
此代码每次使用读取一行,fgetcsv()
然后检查是否已遇到(使用!isset($used[$row[2]])
,usingisset()
比将代码列表添加到数组中并每次搜索都要快。)如果尚未使用过,则将行添加到输出中,并将代码标记为正在使用...
$used = [];
$output = [];
$input = fopen("a.csv", "r");
while($row = fgetcsv($input)) {
if ( !isset($used[$row[2]]) ){
$output[] = $row;
$used[$row[2]] = 1;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句