By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
455,825 Members | 1,429 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 455,825 IT Pros & Developers. It's quick & easy.

in_array oddity

P: n/a
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']);
}
test_in_array(0);
test_in_array(1);
// 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???
Jul 17 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
Tom Barnes wrote:
function test_in_array($val)
{
$a = array('key' => $val);
printf("in_array: %d, value:%s<BR>", in_array('key', $a), $a['key']);
}
test_in_array(0);
test_in_array(1);
// 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???


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 @ pobox.com)
Jul 17 '05 #2

P: n/a
Tom Barnes wrote:
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']);
}
test_in_array(0);
test_in_array(1);
// 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???

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:
http://www.expita.com/nomime.html
http://www.netmeister.org/news/learn2quote2.html
http://www.catb.org/~esr/faqs/smart-questions.html
Jul 17 '05 #3

P: n/a
no********@yahoo.com (Tom Barnes) wrote in message news:<5a*************************@posting.google.c om>...
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']);
}
test_in_array(0);
test_in_array(1);
// 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???


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.
Jul 17 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.