PHP-检测嵌套数组中的重复值
我正在使用一个API,它返回一些用PHP输出的JSON PHP API返回的数组示例。我可以很好地打印出特定的字段值,但我不知道如何编写一个简单的if语句来指示查询结果中是否有重复的名称,特别是重复的[fullName]字段,如下所示PHP-检测嵌套数组中的重复值,php,arrays,json,Php,Arrays,Json,我正在使用一个API,它返回一些用PHP输出的JSON PHP API返回的数组示例。我可以很好地打印出特定的字段值,但我不知道如何编写一个简单的if语句来指示查询结果中是否有重复的名称,特别是重复的[fullName]字段,如下所示 Array ( [status] => Array ( [request] => getUsers [recordsTotal] => 3 [reco
Array
(
[status] => Array
(
[request] => getUsers
[recordsTotal] => 3
[recordsInResponse] => 3
)
[records] => Array
(
[0] => Array
(
[fullName] => Smith, Tom
[firstName] => Tom
[lastName] => Smith
)
[1] => Array
(
[fullName] => Jones, Bill
[firstName] => Bill
[lastName] => Jones
)
[2] => Array
(
[fullName] => Smith, Tom
[firstName] => Tom
[lastName] => Smith
)
)
)
任何帮助都将不胜感激。未经测试,但可以尝试以下方法
function dupeCheck($array, $attribute = 'fullName') {
$list = array();
foreach($array['records'] as $value) {
if(in_array($value[$attribute], $list))
return true;
$list[] = $value[$attribute];
}
return false;
}
只要在记录上迭代,我们就会维护一个属性值列表,一旦它找到一个已经在数组中的属性,就会返回true
那么就:
if(!dupeCheck($output, 'fullName')) { // no dupes in the API response }
这应该起作用:
$data['records'] = array_map("unserialize", array_unique(array_map("serialize", $data['records'])));
摘自并稍作修改。只需创建一个数组,其键将是您迄今为止看到的Entri的全名:
$names = array();
foreach ($output['records'] as $entry){
If (isset($names[$entry['fullname']]){
// do some error processing
echo "'${entry['fullname']}' is a duplicate";
}
$names[$entry['fullname']] = $entry;
}
您应该在
$names
中拥有所有唯一的条目 PHP有很多内置的数组函数来帮助执行这样的操作。您可以尝试以下方法:
$names = array_column($output['records'], "fullName");
if(count(array_unique($names)) < count($names)) {
... /* handle duplicate values here */
}
参考文献:
您要用这个阵列做什么?插入表格?如果是这样,我建议您检查是否已经插入了该值。这些用户是否具有与他们关联的唯一id。只是好奇,但汤姆·史密斯似乎是个相当普通的名字。你能绝对确定这些不是不同的用户吗?..@1nflktd不,只是将特定值打印到HTML。因此,如果有重复的[fullName]结果,我想打印出一行简单的文本,指示检测到重复的结果。@War10ck它们确实有唯一的用户ID与之关联,但为了简单起见,我省略了它们。不管怎么说,ID不是很相关,我只需要知道是否有重复的名字。谢谢局长,CJ上面的回答似乎效果最好。没问题,很高兴你得到了答案。
$names = array_column($output['records'], "fullName");
if(count(array_unique($names)) < count($names)) {
... /* handle duplicate values here */
}
$names_count = array_count_values($names);
foreach($names_count as $key => $value) {
if(value > 1) {
$dupes[] = $key;
}
}