Finding values in arrays with in_array( ) and array_search( )
The in_array( ) function returns true if an array haystack contains a specific value needle:
boolean in_array(mixed needle, array haystack [, boolean strict])
The following example searches the array of integers $smallPrimes for the integer 19:
$smallPrimes = array(3, 5, 7, 11, 13, 17, 19, 23, 29); if (in_array(19, $smallPrimes)) echo "19 is a small prime number"; // Always printed
A third, optional argument can be passed that enforces a strict type check when comparing each element with the needle. In the following example in_array( ) by default returns true; however, with strict type checking, the string "19" doesn't match the integer 19 held in the array and returns false:
$smallPrimes = array(3, 5, 7, 11, 13, 17, 19, 23, 29);
if (in_array("19", $smallPrimes, true))
echo "19 is a small prime number"; // NOT printed
The array_search( ) function-introduced with PHP 4.0.5-works the same way as the in_array( ) function, except the key of the matching value needle is returned rather than the Boolean value true:
mixed array_search(mixed needle, array haystack [, boolean strict])
However, if the value isn't found, array_search( ) returns false. The following fragment shows how array_search( ) works with both associative and indexed arrays:
$measure = array("inch"=>1, "foot"=>12, "yard"=>36);
// prints "foot"
echo array_search(12, $measure);
$units = array("inch", "centimeter", "chain", "furlong");
// prints 2
echo array_search("chain", $units);
Because array_search( ) returns a mixed result-the Boolean value false if the value isn't found or the key of the matching element-a problem is encountered when the first element is found. PHP's automatic type conversion treats the value 0-the index of the first element-as false in a Boolean expression.
|
The correct way to test the result is to use the is-identical operator ===, as shown in the following example:
$index = array_search("inch", $units);
if ($index === false)
echo "Unknown unit: inch";
else
// OK to use $index
echo "Index = $index";