4

私はこの奇妙な問題に直面しました。

配列から値を取得して比較しようとしていますが、機能していません。

コード-1

<?php
echo $data->item[0]['promocode'].'<br>';
echo $data->item[1]['promocode']; 
?>

出力-1

inhouse
inhouse 

次に、両方の値が同じであるか、コード2でない場合に、ifelse条件を試してみましょう。

<?php
if(($data->item[0]['promocode']) == ($data->item[1]['promocode'])){
echo "both values are same";
} else {
echo "both values are NOT same";
}?>

出力-2

both values are NOT same 

非常に奇妙な

私は私が間違っていることを理解していません。

変数Code-3を指定して上記の例を試してみましょう

<?php
$data0=$data->item[0]['promocode'];
$data1=$data->item[1]['promocode'];
if($data0 == $data1){
echo "both values are same";
} else {
echo "both values are NOT same";
}?>

出力-3

both values are NOT same 

今、髪を引っ張っています。


変数に値をハードコーディングするようになりました

コード-4

<?
$data0='inhouse';
$data1='inhouse';
if($data0 == $data1){
echo "both values are same";
} else {
echo "both values are NOT same";
}?>

出力-4

both values are same 

だから私の質問は、なぜこれが起こっているのですか?

要素の配列があり、試してから何かを実行する場合は、前の値を現在の値で確認したいと思います。

御時間ありがとうございます。

4

4 に答える 4

6

両方のエントリが文字列であると仮定すると(最初のコード例に示されているように)、エントリの先頭または末尾の空白が等しくないと思います。最初にそれらを正規化してみてください。

if (trim($data->item[0]['promocode']) == trim($data->item[1]['promocode']))

何が起こっているかを確認するには、最初の例を次のように変更してみてください

<?php
    printf('<pre>"%s"%s"%s"</pre>',
        $data->item[0]['promocode'],
        PHP_EOL,
        $data->item[1]['promocode']);
?>
于 2013-01-29T05:51:49.623 に答える
0

このようにしてみてください

<?php
   if(($data->item[0]['promocode']) === ($data->item[1]['promocode'])){
     echo "both values are same";
   } else {
     echo "both values are NOT same";
   }
?>

またはあなたが使用することができます

strcmp($data->item[0]['promocode'],$data->item[1]['promocode']);
于 2013-01-29T05:49:56.657 に答える
0

デバッグにもstrlen($ var)を使用しています...

<?php
if( strlen($data->item[0]['promocode']) == strlen($data->item[1]['promocode']) ){
  if(($data->item[0]['promocode']) == ($data->item[1]['promocode'])){
    echo "both values are same";
  }
  else {
    echo "both values are NOT same";
  }
}
else{
 echo 'ther are different because 
 strlen($data->item[0]["promocode"]='.strlen($data->item[0]['promocode']).' and 
 strlen($data->item[1][|promocode"]) = '. strlen($data->item[1]['promocode']);
}
?>
于 2013-01-29T06:12:51.573 に答える
-1

タイプキャストされていない条件ステートメント===を使用して、それらが同じタイプであるかどうかを確認してください。または、デバッグの場合は、変数タイプを表示して、誤ってNULLオブジェクトやその他の奇妙なデータ型がないことを確認します。

if($data0 !== $data1) echo gettype($data0).' !== '.gettype($data1);

それはあなたが実際に比較しているものを見つけるのに役立つはずです。もう1つのオプションは、var_dump($data);実際に変数をすべて一緒に表示するために使用することです。データ型にいくつかの不一致があるかどうかを確認してください。オブジェクトが実際に正しく入力されているかどうかを確認するのに役立ちます。

于 2013-01-29T05:53:03.400 に答える