PHP-需要一些关于这个foreach循环的解释的帮助吗

PHP-需要一些关于这个foreach循环的解释的帮助吗,php,arrays,foreach,Php,Arrays,Foreach,我有3个数组,我希望从每个数组中获得公共值 注意:最初的练习是不使用任何内置PHP函数 我有解决方案,但需要帮助来理解解决方案的具体部分 有人能帮我解决这个问题吗 我有以下问题: 1)在第一个嵌套的foreachforeach($ar作为$value)上,$ar包含所有3个数组,您将取每个数组的值并将其作为$value,这是如何工作的?这是嵌套foreach数组的正常行为吗 2)(!isset($values[$value]){如果未设置传入数组值变量$value的值数组,则它等于0/为什么它需

我有3个数组,我希望从每个数组中获得公共值

注意:最初的练习是不使用任何内置PHP函数

我有解决方案,但需要帮助来理解解决方案的具体部分

有人能帮我解决这个问题吗

我有以下问题:

1)在第一个嵌套的foreach
foreach($ar作为$value)
上,$ar包含所有3个数组,您将取每个数组的值并将其作为$value,这是如何工作的?这是嵌套foreach数组的正常行为吗

2)
(!isset($values[$value]){
如果未设置传入数组值变量$value的值数组,则它等于0/为什么它需要等于零

3)$a=$values[$value]+;为什么在这里增加这个值是为了什么目的

4)
foreach($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
1) 在第一个嵌套的foreach foreach($ar as$value)上,$ar包含所有3个 数组,然后取每个数组的值并将其作为$value, 这是如何工作的?这是嵌套foreach数组的正常行为吗

$ar
是对数组中当前数组的引用,因此它与
$array1
相同,然后是
$array2
,etc1。然后内部
foreach
只需获取数组引用并遍历该引用数组,其引用是引用数组中当前引用的整数值

请参阅PHP手册中的文档

2) (!isset($values[$value]){如果传入 数组值变量$value未设置,那么它等于0/为什么 需要等于零吗

检查
$values
数组是否设置了该键,如果尚未设置,则返回
false
是一个否定值,因此它将
true
转换为
false
,将
false
转换为
true
。因此,如果
$value
键未在
$values
中设置,则将其设置为值
0
。然后将

3) $a=$values[$value]++;为什么在这里增加这个值是为了什么 目的

…递增以跟踪在传递给外部
foreach
[$array1,$array2,$array3]
列表中找到
$value
的次数

4) foreach($value=>$count){您能解释一下 最后一个foreach在做什么?穿过它

这只是读取从数组中存储的值的各个实例,检查计数,并将值(
$value
)存储在
$commonValues
数组中(如果发生两次以上)



1.从技术上讲,
$ar
是相关的
[$array1,…]
数组的副本(该数组又是实际的
$array#
变量的副本);
&$ar
意味着使用对实际数组的引用,而不是复制。下面是一个演示:注意
$array1
是如何修改的,但其他两个没有修改(因为它们没有这样的
&
[&$array1,&$array2,&$array3]
).

为什么不直接使用array\u intersect?如果您可以编辑您的帖子,为
$commonValues
添加数组,以便我们看到最终的值,那就太好了。@Chip Dean最初的练习是不使用任何内置PHPfunctions@VladBardalez comment added$values是一个数组。$value是您正在查找的数字t来自传入的数组。$values[$value]++意味着你又找到了那个数字。这是你保持总数的方式。这就是为什么在最后你循环遍历每个$value并测试它是否超过两个。对于2)如果传入$value的$values数组未设置,则将其设置为0,是否有任何特定的原因它为0而不是false?或者0与此有关问题3++增量?您正在增加值,因此将其设置为
false
会适得其反(双关语?)。干杯这对您的逐步解释很有帮助。