PHP in_array мәселесінде нөлдік мәнді тексеру кезінде массивте тексеру

PHP-те in_array() жұмыс істеу кезінде біртүрлі жағдайға тап болдым. Төменде менің кодексім және оның шығарылымы

<?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

If we look at the $process array, there is no 0 value in it. Still it's giving me true if I check if(in_array(0, $process))

Бұл туралы ешкім білмейді ме?

1
0 == «жойылған» .
қосылды автор cmbuckley, көзі
0 == «жойылған» .
қосылды автор cmbuckley, көзі

9 жауаптар

қатаң тексеру қажет болса, $ strict опциясын пайдаланыңыз:

in_array(0, $process, true)

Егер сіз ережелерді білмейтін болсаңыз/дұрыс емес нәрсе күткен болсаңыз, PHP жолының ⟷ int салыстыру күрделі екенін жақсы біледі.

3
қосылды
+1 менден де.
қосылды автор NullPointer, көзі
true соңғы параметрін қою арқылы мәселе шешілді. Мен оны ұзақ уақыт бұрын көрдім және сіз string-int деп айтқан сияқты массивте аралас мәндер болғанда,
қосылды автор NullPointer, көзі

қатаң тексеру қажет болса, $ strict опциясын пайдаланыңыз:

in_array(0, $process, true)

Егер сіз ережелерді білмейтін болсаңыз/дұрыс емес нәрсе күткен болсаңыз, PHP жолының ⟷ int салыстыру күрделі екенін жақсы біледі.

3
қосылды
+1 менден де.
қосылды автор NullPointer, көзі
true соңғы параметрін қою арқылы мәселе шешілді. Мен оны ұзақ уақыт бұрын көрдім және сіз string-int деп айтқан сияқты массивте аралас мәндер болғанда,
қосылды автор NullPointer, көзі

Қалай көріңіз

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

немесе сіз іздеуді (опциональды) қолдануға болады

if(array_search('0',$process)) {
3
қосылды
+1 менден. Ия. Сіздікі жөн. Бірақ не үшін Quotes дегенге 0 қою керек? Егер Quotes жоқ 1-де іздесем, онда ол дұрыс нәтиже береді.
қосылды автор NullPointer, көзі
Бос кодты пайдаланып 0 == «жойылған» . Қатаң салыстыруды талап ететін in_array үшін үшінші параметрді ескеріңіз. Сондай-ақ, салыстыру кестелерін қараңыз .
қосылды автор cmbuckley, көзі

0 сөзін тырнақшаға қою керек деп есептеймін:

егер (! in_array («0», $ process))

2
қосылды

0 сөзін тырнақшаға қою керек деп есептеймін:

егер (! in_array («0», $ process))

2
қосылды

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"
1
қосылды

Менің ойымша, in_array мүмкін қатаң типті тексеру мүмкін емес. егер тексерсеңіз

 if (0 == "deleted") echo "xx";
1
қосылды

Мұны көріңіз

if(!in_array('0', $process))
1
қосылды

In_array функциясының үшінші параметрін [$ is_strict] пайдалану қажет.

in_array(0, $process, true)

The point is what any string after (int) conversion equal to 0. (int) "deleted" => 0. So in_array without strict mode is equal to "deleted" == 0 which true. When you use strict its equal to "deleted" === 0 which false.

1
қосылды