比较API

时间:2016-03-29 15:09:00

标签: php arrays api multidimensional-array

我目前正在使用 Troy Hunt 从其网站Have I been pwned?

提供的API构建新工具

API地址的输出提供了一个易于搜索JSON数组的漏洞,但在每个数组中还有另一个名为“DataClasses”的数组,它可能包含“电子邮件地址”或“用户名”等值。有时当用户遇到多个违规行为时,显然会有多个“DataClasses”数组通过。

我的问题是,如果有多个阵列,我将如何比较每个阵列以找出它们的共同点。所以我可以输出'我们在3个漏洞中的电子邮件地址中找到'或类似的东西。我怎么能这样做?我使用的for循环如下所示:

$dc = count($fs[$i]['DataClasses']);
for($j=0;$j<$dc;$j++) {
   $datclass = $fs[$i]['DataClasses'][$j];
}

有人有什么想法吗?以防有人问,是的,这是for循环中的for循环,就像我说的'DataClasses'是输出的原始JSON数组中的一个数组,所以只是为了澄清一个例子:

['DataClasses'][0]

可以等于'电子邮件地址'

1 个答案:

答案 0 :(得分:0)

喜欢这样吗?

$fs = json_decode($jsonString, true);
$dc = array_count_values(call_user_func_array('array_merge', array_map(function($x) {return $x['DataClasses'];}, $fs)));
var_dump($dc);

输出:

array(7) {
  ["Email addresses"]=>
  int(3)
  ["IP addresses"]=>
  int(1)
  ["Names"]=>
  int(1)
  ["Passwords"]=>
  int(3)
  ["Password hints"]=>
  int(1)
  ["Usernames"]=>
  int(2)
  ["Dates of birth"]=>
  int(1)
}