Wednesday, January 20, 2010

Recipe 4.12. Finding the Position of a Value in an Array










Recipe 4.12. Finding the Position of a Value in an Array



4.12.1. Problem


You want to know if a value
is in an array. If the value is in the array, you want to know its key.




4.12.2. Solution


Use array_search( )
. It returns the key of the found value. If the value is not in the array, it returns false:


$position = array_search($value, $array);
if ($position !== false) {
// the element in position $position has $value as its value in array $array
}





4.12.3. Discussion


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:


$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.




4.12.4. See Also


Recipe 4.11 for checking whether an element is in an array; documentation on array_search( ) at http://www.php.net/array-search; for more sophisticated searching of arrays using regular expression, see preg_replace( ), which is found at http://www.php.net/preg-replace and Chapter 22.













No comments: