我想在一个php数组中比较两个值但是当我比较时代码停止即使条件为真我也想知道如何比较这两个值是我的代码:
$i=0;$cmpt=0;
foreach($newarray as $newarray1){
$j=0;
while ($newarray1[$i]!==$newarray1[$j]){ // the iteration dont get in here even when the condition is true
$j+1;
var_dump($j);
}
if ($i=$j){
$couleur[]=$Tcouleur[$cmpt];
$cmpt+1;
}else{
$couleur[]=$Tcouleur[$j];
}
$i+1;
}
var_dump($couleur);
答案 0 :(得分:2)
这可能是因为行
$j+1;
你的两个变量($ i和$ j)都没有在while循环中更新,导致无限循环。 (一直检查相同的值,如果条件为真,则为无限循环,否则代码将永远不会进入循环并退出。)
使用$j+1;
或$j++;
$j = $j + 1;
此外,正如@apomene所示,
如果您的数组可以有多种类型,
!==
运算符检查类型和相等性。如果你的数组有相同的类型(例如int),这不会产生问题。使用相同的类型!==
和!=
实际上是相同的。否则,它(!==
)也会检查类型是否相等。详细说明,
$a = 1;
$b = '1';
$c = 2;
$d = 1;
$a == $b // TRUE ( different type, equal after conversion - char <-> int)
$a === $b // FALSE( different types - int vs char)
$a == $c // FALSE( same type not equal)
$a === $d // TRUE ( same type and equal)
this问题中的进一步阅读。
最后,您似乎在赋值和变量比较之间存在混淆。 ($i = $j
vs $i == $j
)
查看php assignment vs comparison变量的手册。
答案 1 :(得分:1)
在您的while循环中,$j+1
不应该是$j++
或$j = $j + 1
吗?
我知道这不是你问的问题......但最后你的$i+1
和$cmpt
现在我想你想要这个:
$values = ['abc','def', 'hij','klm', 'def', 'klm','nop'];
$couleurs = ['rouge','vert','bleu','jaune','rose'];
$couleurPourValeur = [];
$increment = 0;
foreach($values as $value){
if(!isset($couleurPourValeur[$value])){
$couleurPourValeur[$value] = $couleurs[$increment];
$increment++;
}
}
print_r($couleurPourValeur);