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