我使用API返回一些我在PHP中输出的JSON。
PHP
$result = $api->sendRequest("getUsers", $inputParameters);
$output = json_decode($result, true);
API返回的数组示例。我可以打印出特定的字段值,但我无法弄清楚如何编写一个简单的if语句来指示查询结果中是否有重复的名称,特别是重复的[fullName]字段,如下所示。 / p>
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
)
)
)
非常感谢任何帮助。
答案 0 :(得分:1)
未经测试,但可能会尝试类似
的内容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 }
答案 1 :(得分:1)
这应该有效:
$data['records'] = array_map("unserialize", array_unique(array_map("serialize", $data['records'])));
取自here并略有修改。
答案 2 :(得分:0)
只需创建一个数组,其键将是您目前所见的主题的全名:
$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
中的所有唯一条目。
答案 3 :(得分:0)
PHP有很多内置的数组函数来帮助这样的操作。您可以尝试以下方法:
$names = array_column($output['records'], "fullName");
if(count(array_unique($names)) < count($names)) {
... /* handle duplicate values here */
}
此外,$names
包含原始数组中所有fullName
列的唯一数组,以便于访问和遍历。您可以在上面的if
语句中使用它来确定哪些名称是重复的,如下所示:
$names_count = array_count_values($names);
foreach($names_count as $key => $value) {
if(value > 1) {
$dupes[] = $key;
}
}
<强>参考文献:强>