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

时间:2015-04-25 01:24:36

标签: php arrays foreach

我有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

1 个答案:

答案 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变为falsefalse变为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这样:&)。