You want to know if a value is in an array. If the value is in the array, you want to know its key.
Use array_search(). It returns the key of the found value. If the value is not in the array, it returns false:
1 2 3 4 |
$position = array_search($value, $array); if ($position !== false) { // the element in position $position has $value as its value in array $array } |
Use in_array() to find if an array contains a value; use array_search() to discover where that value is located.
However, because array_search() gracefully handles searches in which the value isn’t found, it’s better to use array_search() instead of in_array().
The speed difference is minute, and the extra information is potentially useful:
1 2 3 4 5 6 7 8 9 10 |
$favorite_foods = array(1 => 'artichokes', 'bread', 'cauliflower', 'deviled eggs'); $food = 'cauliflower'; $position = array_search($food, $favorite_foods); if ($position !== false) { echo "My #$position favorite food is $food"; } else { echo "Blech! I hate $food!"; } |
Use the !== check against false because if your string is found in the array at position 0, the if evaluates to a logical false, which isn’t what is meant or wanted.
If a value is in the array multiple times, array_search() is only guaranteed to return one of the instances, not the first instance.