我有3个数组,我希望从这些数组中获取每个数组的公共值。
注意:最初的练习是不使用任何内置的PHP函数。
我有解决方案,但需要帮助尝试了解解决方案的特定部分。
有人可以引导我解决这个问题吗?
我对以下内容有疑问:
1)在第一个嵌套的foreach foreach ($ar as $value)
上,$ ar包含所有3个数组,并且您将获取每个数组的值并将其作为$ value,这是如何工作的?这是嵌套foreach数组的正常行为吗?
2) (!isset($values[$value])) {
如果没有设置传入数组值变量$ value的值数组,那么它等于0 /为什么它需要等于零?
3) $a = $values[$value]++;
为什么要将此增量用于此目的?
4) foreach ($values as $value => $count) {
你能解释最后一个foreach在做什么吗?穿过它?
代码
$array1 = [1, 5, 10, 20, 40, 80];
$array2 = [6, 7, 20, 80, 100];
$array3 = [3, 4, 15, 20, 30, 70, 80, 120];
$values = [];
foreach ([$array1, $array2, $array3] as $ar) {
foreach ($ar as $value) {
if (!isset($values[$value])) {
$values[$value] = 0;
}
$a = $values[$value]++;
}
}
$commonValues = [];
foreach ($values as $value => $count) {
if ($count > 2) {
$commonValues[] = $value;
}
}
print_r($commonValues); // common values are 20, 80
答案 0 :(得分:1)
1)在第一个嵌套的foreach foreach($ ar为$ value)中,$ ar全部为3 数组,你正在取每个数值并将其作为$ value, 这是如何运作的?这是嵌套foreach数组的正常行为吗?
$ar
是对数组中当前数组的引用,因此它与$array1
相同,然后$array2
等 1 。然后内部foreach
只接受数组引用并遍历引用的数组,其中它的引用是当前引用的整数值引用的数组。
请参阅PHP手册中的foreach
文档。
2)(!isset($ values [$ value])){如果值数组传入 数组值变量$ value未设置然后它等于0 /为什么 需要等于零?
isset()
检查$values
数组 是否具有该密钥集,如果尚未设置则返回false
。 !
是否定,因此true
变为false
而false
变为true
。因此,如果$value
中的$values
密钥未设置,请将其设置为0
。那将是......
3)$ a = $ values [$ value] ++;你为什么要在这里增加它 目的
...会增加以跟踪您传递到外部$value
的{{1}}列表中找到[$array1, $array2, $array3]
的次数。
4)foreach($ value as $ value => $ count){你能解释一下 最后的foreach正在做什么?穿过它?
这只是读取存储在数组中的值的各个实例,检查计数,并将值foreach
存储在$value
数组中,如果它发生的次数超过两次。
1。从技术上讲,$commonValues
是相关$ar
数组的副本(后者又是实际[$array1, ...]
变量的副本); $array#
意味着将引用用于实际数组,而不是复制。以下是演示:http://codepad.viper-7.com/HxdsD7请注意&$ar
是如何修改的,但其他两个不是(因为他们没有$array1
这样:&
)。 强> 子>