1

PHP の in_array() を使用しているときに、1 つの奇妙な状況に直面しています。以下は私のコードとその出力です

<?php
$process = array("as12"=>"deleted","as13"=>1,"as14"=>1);
if(!in_array(0, $process))
    echo "success";
else
    echo "not success";

//It's outputting "not success";

var_dump(in_array(0, $process));
//Output : null

var_dump(in_array(0, $this->tProcessActions) === true);
///Output : true

$process配列を見ると、そこには0値がありません。私がチェックすればまだそれは私に真実を与えていますif(in_array(0, $process))

誰でもそれについて考えられますか?

4

7 に答える 7

3

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

if(!in_array('0', $process)) {

または、次のような検索(オプション)を使用できます

if(array_search('0',$process)) {
于 2013-06-21T10:03:59.667 に答える
3

厳密なチェックが必要な場合は、次の$strictオプションを使用します。

in_array(0, $process, true)

PHP の string ⟷ int 比較は、規則を知らない場合や間違った結果が予想される場合、複雑になることはよく知られています。

于 2013-06-21T10:07:08.307 に答える
2

引用符の中に入れる必要があると思い0ます:

if(!in_array("0", $process))

于 2013-06-21T10:05:35.900 に答える
1

パラメータを使用すると、strictここで必要なものが得られます。

$process = array("as12"=>"deleted","as13"=>1,"as14"=>1);
var_dump( in_array(0, $process, true ) );
// gives false

array_searchまたは、偽でないかどうかを使用してテストします。

var key = array_search( 0, array( 'foo' => 1, 'bar' => 0 ) );
// key is "bar"
于 2013-06-21T10:04:10.017 に答える
1

in_array は厳密な型チェックではない可能性があるためだと思います。チェックすると

 if (0 == "deleted") echo "xx";
于 2013-06-21T10:09:15.943 に答える
1

これを試して

if(!in_array('0', $process))
于 2013-06-21T10:09:17.133 に答える
1

in_array 関数の 3 番目のパラメーター [$is_strict] を使用する必要があります。

in_array(0, $process, true)

ポイントは、(int) 変換後の任意の文字列が 0 に等しいことです。(int) "deleted" => 0. したがって、厳密モードのない in_array は "deleted" == 0 と等しくなります。strict を使用すると、"deleted" === 0 と等しくなり、false になります。

于 2013-06-21T10:10:38.170 に答える