php - 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
任何建议请为什么会这样?
先感谢您
解决方案
该错误是由于尝试增加尚未定义的字段的整数而导致的。
在第一次迭代中,数组$seen
为空,因此其中不存在任何键。当试图增加一个条目 ( $seen[ strtolower( $n ) ]++;
) 的值时,您需要检查该条目是否已存在于该数组中:
foreach ($new as $n) {
$key = strtolower($n);
if ( ! isset($seen[$key])) {
$seen[$key] = 1;
} else {
$seen[$key]++;
}
}
推荐阅读
- python - 为什么显示“列表索引超出范围”?
- javascript - 如何将字符串大写?
- mysql - Spring Boot 和 HikariPool - 2-3 天后无法创建连接
- excel - 在 Excel VBA 中复制和粘贴可变范围
- java - 如何修复 netbeans 2.8 中的二维数组错误
- python - 如何在csv文件中找到列的五个最大值
- r - Crosstalk - 在一张 Leaflet 地图中过滤两个不同的共享数据环境
- r - 当一个列变量等于R中的另一个时计算行数
- php - Phppgadmin 不在 localhost 上工作,WAMP(bitnami)
- webrtc - 通过 Webrtc 录制 google meet