【问题标题】:PHP check if value of array[$i] =!array[$j]PHP 检查数组 [$i] 的值是否 =!array[$j]
【发布时间】:2018-03-24 04:00:39
【问题描述】:

我想比较一个 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);

【问题讨论】:

  • $j+1no-op
  • 能否请您详细说明问题
  • if ($i=$j) - 你应该阅读 = vs. == 和 ===

标签: php arrays


【解决方案1】:

这可能是因为这条线

$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

查看变量的assignmentcomparison 的php 手册。

【讨论】:

  • 感谢您的回答。我纠正了我的错误,但它没有给我正在寻找的东西:我想做的是给我的 erray 的每个元素一个颜色,但是:每个元素都有它独特的颜色和如果此元素在 erray 中返回,它将具有相同的颜色
  • 不客气,如果对您有帮助并解决了您的问题,请将其标记为已回答。
  • 正在使用的数组如下所示:$newarray{ [0]=> string(10) "test coupe" [1]=> string(6) "skynet" [2]=> string (10) "test coupe" [3]=> string(6) "skynet" [4]=> string(10) "test coupe" [5]=> string(10) "Sans-Titre" } 但我只是在 while 循环中打印 $array[$i] 它给了我这个: kssnnn TTTTTarray 我很困惑为什么它不给我值?
  • 当你尝试打印数组的值时复制这段代码。我无法帮助您不知道您正在使用的代码。不要忘记使用撇号将您的代码包含在代码块中。比如code
  • ` $newarray = ['test coupe','skynet', 'test coupe','skynet', 'test coupe', 'Sans-Titre']; $couleur=数组(); $i=0;$cmpt=0; foreach($newarray as $newarray1){ $j=0; while ($newarray1[$i]!=$newarray1[$j]){ echo $newarray1[$i];// 当我在这里打印时,它给了我 kssnnn TTTTT $j++; } if ($i==$j){ $couleur[]=$Tcouleur[$cmpt]; $cmpt+1; //var_dump($cmpt); }else{ $couleur[]=$Tcouleur[$j]; } $i++; }`
【解决方案2】:

在您的 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);

【讨论】:

  • 你能给我们$newarray$TCouleur的例子吗?
  • $newarray { [0]=> string(10) "test coupe" [1]=> string(6) "skynet" [2]=> string(10) "test coupe" [ 3]=> string(6) "skynet" [4]=> string(10) "test coupe" [5]=> string(10) "Sans-Titre" } -------$Tcouleur{ [ 0]=> 字符串(7) "#BA0CF5" [1]=> 字符串(7) "#BA0CF5" [2]=> 字符串(7) "#BA0CF5" [3]=> 字符串(7) "#BA0CF5 " [4]=> string(7) "#BA0CF5" [5]=> string(7) "#BA0CF5" } 但它假设每个元素都是唯一的颜色,并且当元素再次出现在数组中时,它必须给他同样的颜色
  • 在我的回复中,$couleurs 应该有足够的颜色来填充您需要的不同 $values
  • 我在你的例子中想要的结果是 $couleurPourValeur=['rouge,vert,bleu,jaune,vert,jaune,rose] 。当相同的值返回时,我给它与之前相同的颜色,我希望它是清晰的
猜你喜欢
  • 2014-01-23
  • 1970-01-01
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
相关资源
最近更新 更多