in_array oddity

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
Check out this code:

// Start Code -------------
function test_in_array($val)
    $a = array('key' => $val);
    printf("in_array: %d, value:%s<BR>", in_array('key', $a), $a['key']);
// End Code ---------------

The output I get is:

in_array: 1, value:0
in_array: 0, value:1

Why does the second in_array() call fail???

Re: in_array oddity

Tom Barnes wrote:
Quoted text here. Click to load it

Well, the second call returns false because 'key' does not appear as a
value in the associative array. (Only as a key.) It also returns false
for values of 2, 3, etc.

I have no idea why the first call returns true, though... If you pass
true as the third parameter ("strict") to in_array, it will return false
as expected.

-- brion vibber (brion @

Re: in_array oddity

Tom Barnes wrote:
Quoted text here. Click to load it

Wrong question! The right question is:

"Why does the first in_array() call return true?"

And the answer is:

Because 'key' is converted to numeric, to 0 (zero) and 0 (zero) *is* in
the $a array.

The second in_array() call tries to find a 'key' (or 0) but fails
because the value in the array is 1.

Try specifying the third parameter to the in_array() call ...

in_array('key', $a, true)

Happy Coding :-)

USENET would be a better place if everybody read:

Re: in_array oddity (Tom Barnes) wrote in message
Quoted text here. Click to load it

I'm so stupid, for some reason I thought in_array() was searching for
keys. I should use array_key_exists() instead. Thanks Brion and Pedro.

Site Timeline