in_array oddity

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Tom Barnes

    in_array oddity

    Check out this code:

    // Start Code -------------
    function test_in_array($ val)
    {
    $a = array('key' => $val);
    printf("in_arra y: %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???
  • Brion Vibber

    #2
    Re: in_array oddity

    Tom Barnes wrote:[color=blue]
    > function test_in_array($ val)
    > {
    > $a = array('key' => $val);
    > printf("in_arra y: %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???[/color]

    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)

    Comment

    • Pedro Graca

      #3
      Re: in_array oddity

      Tom Barnes wrote:[color=blue]
      > Check out this code:
      >
      > // Start Code -------------
      > function test_in_array($ val)
      > {
      > $a = array('key' => $val);
      > printf("in_arra y: %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???[/color]


      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:



      Comment

      • Tom Barnes

        #4
        Re: in_array oddity

        nospam1978@yaho o.com (Tom Barnes) wrote in message news:<5af28966. 0410111503.f6f2 43f@posting.goo gle.com>...[color=blue]
        > Check out this code:
        >
        > // Start Code -------------
        > function test_in_array($ val)
        > {
        > $a = array('key' => $val);
        > printf("in_arra y: %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???[/color]

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

        Comment

        Working...