Php foreach、差分数组的奇怪问题

Php foreach、差分数组的奇怪问题,php,laravel,Php,Laravel,我们正在尝试比较两个数组的差异,代码正在处理这个示例 $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]

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

$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] ."";
  }
然而,我们在Laravel和PHP7+上尝试了同样的方法,我们收到了这个错误

ErrorException: Undefined index: red in file ...Controller.php on line 469
有什么建议吗?为什么会这样


提前感谢

尝试增加尚未定义字段的整数会导致此错误

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

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

评估数组中不存在的键将得到警告。 代码式

if(!$seen[$o]){
应该是

if(!isset($seen[$o])){
递增不存在的关联密钥将得到警告 代码式

seen[strtolower($n)]++;
应该是

seen[strtolower($n)]=isset(seen[strtolower($n)])?seen[strtolower($n)]+1:1;

用这个替换你的完整代码。它会工作的


请注意:尽快离开W3P。这对PHP来说是一个非常糟糕的资源,充斥着糟糕的实践和超过时的代码。我看到了,谢谢你的提示treyBake$seen[strtolower($n)]++;我也会在内容上标记它
foreach ($new as $n) {
    $key = strtolower($n);
    if ( ! isset($seen[$key])) {
        $seen[$key] = 1;
    } else {
        $seen[$key]++;
    }
}
$new=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow", "g"=>"purple");
$old=array("a"=>"red","b"=>"green","c"=>"white","d"=>"black");

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

foreach ($old as $key => $o) {
    $o = strtolower($o);

    if (!isset($seen[$o])) { 
      $diffold[$key] = $o; 
    }
}

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

foreach ($new as $key => $n) {
    $n = strtolower($n);
    if (!isset($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 => purplesomething