2011-12-09 11 views
-1

私はこのPHPを持っている:私は実行するとなぜこのPHPは "email" == "domain"だと思いますか?

$ec = $trimmed['emails'];//has a value of "email" 
$dc = $trimmed['date'];//has a value of "timestamp" 

$data = array("email","domain","timestamp"); 

$num = count($data); 

for ($i=0; $i<$num; $i++){ 

    if ($data[$i] == $ec) { 
     $ec = $i; 
    } else if ($data[$i] == $dc) { 
     $dc = $i; 
    }  
} 

このPHP $ ECは、ドメインではなく、電子メールの場所に等しい終わります。また、最初のifが "email"と$ ecを最初に表示したときに、 "email"と "domain"の両方が "email"と同等であると考えていることは明らかです。なぜどんなアイデア?

+1

に設定されています://www.php.net/manual/en/function.array-search.php)。多分それに切り替えると、あなたの問題は完全に解決されます。答え自体については、 '=='と比較すると、* any *文字列が整数0と等しいと考えてください。 – Jon

+0

あなたのコードはバグです、このコードとより多くのデータのポイントを投稿してください、私はそれが別の方法で記述することができると確信しています。 –

+0

コードをデバッグすれば、その理由を正確に知ることができます。 – animuson

答えて

6

ためtrueを出力する単純なvar_dump(0 == "domain");と証明真と評価"domain"と比較される(現在0である)第2の反復$ec、、、オン。

ウィリアム・ヴァン・レンセラール(William Van Rensselaer)は以下のように提案しています。===を使用するか、機能array_searchをチェックしてください。

例:$i == 0$ecが正しく、0に設定されているループの最初の反復で

$ec = array_search($data, $trimmed['emails']); 
$dc = array_search($data, $trimmed['date']); 
+1

また、PHPでの等価性をチェックするために、===(not ==)を使用する必要があることを追加します。 – Will

3

$i == 1がを新しい値$ecに対してテストするとき、ループの2番目の反復で。だから、"domain"は数(0)として解釈されます、そして0 == 0trueので、$ecは、HTTP([ `array_search`]これは、あなたの質問に答えていませんが、このコードは書くのバグの道のように見える1.

関連する問題