[英]Comparing arrays and counting their values
我如何比较这些数组并计算其值:
$arrayone = array("3", "2", "1", "2", "3");
$arraytwo = array("1", "2", "3", "2", "1");
我的目标不是3(唯一值)或5(通常是相同数量的值),而是4! 第二个数组包含一个太多的1,我如何获得这样的新数组:
$arraythree = array("1", "2", "3", "2");
这给了我3个独特的价值:
$intersect = array_intersect($arrayone, $arraytwo);
$arraythree = array_unique($intersect);
count($arraythree)
这给了我5个非唯一值:
$arraythree = array_intersect($arrayone, $arraytwo);
count($arraythree)
您可以使用以下自定义函数:
function myIntersect($a, $b) {
foreach ($a as $x) {
$i = array_search($x, $b);
if ($i !== false) {
$c[] = $x;
unset($b[$i]);
}
}
return $c;
}
如何使用:
$arrayone = array("3", "2", "1", "2", "3");
$arraytwo = array("1", "2", "3", "2", "1");
$result = myIntersect($arrayone, $arraytwo);
print_r($result); // ["3", "2", "1", "2"]
这个想法是从第一个数组中获取每个值,然后在第二个数组中找到它的第一个位置。 如果找到,则将其复制到结果中, 并在找到的位置擦除第二个数组中的匹配值,因此无法再次匹配。
foreach ($a as $x) { ... }
: $ x是第一个数组中的值 $i = array_search($x, $b);
: $ i是值在第二个数组中出现的第一个位置,或者,如果找不到,则$ i为false
if ($i !== false) {
:如果搜索成功...
$c[] = $x;
:然后将值添加到结果数组$ c中并... unset($b[$i]);
:...从找到的位置$ b中将其删除。 请注意,在PHP中,传递给函数的数组实际上是原始数组的副本,因此此类删除对传递给函数的原始数组没有影响。 return $c;
:将结果数组返回给调用方
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.