Categories
PHP

Finding values and keys in arrays

Check if a value or key exists in the array with in_array and array_key_exists functions respectively. Search the array by value and get first or all corresponding keys from the array with array_search and array_keys functions.

  1. in_array(): Check if a value exists in the array
  2. array_search(): Search the array by value
  3. array_keys(): Search the array by value
  4. array_key_exists(): Check if a key or index exists in the array
  5. array_values(): Get all the values of an array

in_array()

<?php
//Syntax
in_array(mixed $needle, array $haystack, bool $strict = false): bool

The in_array() function returns true if an array $haystack contains a specific value $needle. The following example searches the array of integers $smallPrimes for the integer 19:

<?php
 $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:

<?php
 $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
<?php
//Syntax
array_search ( mixed $needle,
               array $haystack,
               bool $strict = false): int|string|false

The array_search( ) function 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. However, if the value isn’t found, array_search( ) returns false.

The following code shows how array_search( ) works with both associative and indexed arrays:

<?php
 $measure = array("inch"=>1, "foot"=>12, "yard"=>36);
 echo array_search(12, $measure); //foot

 $units = array("inch", "centimeter", "chain", "furlong");
 echo array_search("chain", $units); //2

Because array_search( ) returns a mixed result: the Boolean value false if the value isn’t found or the array key of the matching element. A problem is encountered when the first element is found in an indexed array, PHP’s automatic type conversion treats the value 0, the index of the first element, as false in a Boolean expression.

Care must be taken with functions, such as array_search(), that return a result or the Boolean value false to indicate when a result can’t be determined. If the return value is used as a Boolean (in an expression or as a Boolean parameter to a function) a valid result may be automatically converted to false. If such a function returns 0, 0.0, "c", an empty string, or an empty array, PHP’s automatic type conversion converts the result to false when a Boolean value is required.

The correct way to test the result is to use the is-identical operator ===, as shown in the following example:

<?php
 $units = array("inch", "centimeter", "chain", "furlong");
 $index = array_search("inch", $units);
 if ($index === false)
  echo "Unknown unit: inch";
 else
  // OK to use $index
  echo "Index = $index";

Note:
This function returns the first corresponding key for a given value, if you want to find all corresponding keys use array_keys() function instead.

array_keys()

<?php
/* Syntax # 1
returns all the keys from the array.*/
 array_keys(array $array): array

/*Syntax # 2
searches the array for a value and returns a subset of the keys from the array*/
 array_keys(array $array, mixed $search_value,
            bool $strict = false): array

This function returns all the keys of an array. If the optional $search_value argument is specified, you can get the keys for that particular value.

Example: Get all the keys from the array

<?php
 $a = ['red','blue','red','green','one'=>1, 'two'=>2];
 $keys = array_keys($a);
 print_r($keys);
 /* prints: 
Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => one
    [5] => two
)
*/

Example: Search array by value and get corresponding keys

The following code shows how array_keys( ) works with both associative and indexed arrays:

<?php
 $a = ['red','blue','red','green','one'=>1, 'two'=>2];
 $keys = array_keys($a, 'red'); //[0,2]

 $b = ['one'=>'one', 1=>'one', 2=>'two'];
 $k = array_keys($b, 'one'); //['one',1]

Note:
Similar to in_array() and array_search() functions, a third, optional argument can be passed that enforces a strict type check when comparing each element with the needle.

array_key_exists()

<?php
 //syntax
 array_key_exists(string|int $key, array $array): bool

The array_key_exists() function returns true if an array $array contains a specific key $key. The following example searches the array $numbers for the key two:

<?php
 //Associative array
 $numbers = ['one'=>1, 'two'=>2, 'three'=>3, 'four'=>'four'];
 if ( array_key_exists('two', $numbers) )
  echo 'The key "two" exists in the array $numbers';
 else
  echo 'Key not found';

/* Prints:
The key "two" exists in the array $numbers;
*/

Key can be any value possible for an array index:

<?php
 //Indexed array
 $arr = ['a','b','c',1,2,3];
 if ( array_key_exists(2, $arr) )
  echo 'The index key 2 value is: '.$arr[2];
 else 
  echo 'Key not found';

/* Prints:
 The index key 2 value is: c
*/

array_values()

<?php
 //Syntax
 array_values(array $array): array

This function returns an indexed array with all the values of the original array. See Example:

<?php
      //associative array
 $a = ['one'=>1, 'two'=>2, 'three'=> 3];

      //returns an indexed array
 $b = array_values($a);

 print_r($b);
 /*Prints
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
 */

Working with arrays:

  1. Creating Arrays
  2. Array Iteration
  3. Array Internal Pointers
  4. Explode and Implode Functions
  5. Count Array Elements, Find Min and Max Values
  6. Search values and keys in arrays
  7. Filter array elements using array_filter()
  8. Modify array elements using array_map() and array_walk()
  9. Split, tokenize, and iterate a string
  10. Convert a delimited string into an array
  11. Sorting arrays