首页 > 解决方案 > foreach,差分数组的奇怪问题

问题描述

我们正在尝试比较两个数组的差异,代码正在处理 w3schools 示例

$new=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow", "g"=>"purple");
$old=array("a"=>"red","b"=>"green","c"=>"white","d"=>"black");

$seen = array( );
foreach ($new as $n) {
[Line 469]        $seen[strtolower($n)]++;
}

foreach ($old as $key => $o) {
    $o = strtolower($o);
    if (!$seen[$o]) { 
      $diffold[$key] = $o; 
    }
}


  $seen2 = array( );
  foreach ($old as $o) {
    $seen2[strtolower($o)]++;
}

foreach ($new as $key => $n) {
    $n = strtolower($n);
    if (!$seen2[$n]) { $diffnew[$key] = $n; }
}


  print_r($diffold);
  print_r($diffnew);

  foreach($diffold as $key => $value) {
    echo "<br>old value is: ".$key." => " . $diffold[$key] ."";
  }

  foreach($diffnew as $key => $value) {
    echo "<br>new value is: ".$key." => " . $diffnew[$key] ."";
  }

结果例外

Array ( [c] => white [d] => black ) Array ( [c] => blue [d] => yellow [g] => purple )
old value is: c => white
old value is: d => black
new value is: c => blue
new value is: d => yellow
new value is: g => purple

但是我们在 Laravel 和 PHP 7+ 上尝试了同样的方法,我们收到了这个错误

ErrorException: Undefined index: red in file ...Controller.php on line 469

任何建议请为什么会这样?

先感谢您

标签: phplaravel

解决方案


该错误是由于尝试增加尚未定义的字段的整数而导致的。

在第一次迭代中,数组$seen为空,因此其中不存在任何键。当试图增加一个条目 ( $seen[ strtolower( $n ) ]++;) 的值时,您需要检查该条目是否已存在于该数组中:

foreach ($new as $n) {
    $key = strtolower($n);
    if ( ! isset($seen[$key])) {
        $seen[$key] = 1;
    } else {
        $seen[$key]++;
    }
}

推荐阅读