Check if associative array contains value, and retrieve key / position in array

mary_berry picture mary_berry · Jul 15, 2014 · Viewed 17.8k times · Source

I'm struggling to explain what I want to do here so apologies if I confuse you.. I'm just as confused myself

I have an array like so:

$foo = array(
    array('value' => 5680, 'text' => 'Red'), 
    array('value' => 7899, 'text' => 'Green'), 
    array('value' => 9968, 'text' => 'Blue'), 
    array('value' => 4038, 'text' => 'Yellow'),
)

I want to check if the array contains the value e.g. 7899 and also get the text linked to that value "Green" in the example above.

Answer

jcbwlkr picture jcbwlkr · Jul 15, 2014

Try something like this

$foo = array(
    array('value' => 5680, 'text' => 'Red'), 
    array('value' => 7899, 'text' => 'Green'), 
    array('value' => 9968, 'text' => 'Blue'), 
    array('value' => 4038, 'text' => 'Yellow'),
);

$found = current(array_filter($foo, function($item) {
    return isset($item['value']) && 7899 == $item['value'];
}));

print_r($found);

Which outputs

Array
(
    [value] => 7899
    [text] => Green
)

The key here is array_filter. If the search value 7899 is not static then you could bring it in to the closure with something like function($item) use($searchValue). Note that array_filter is returning an array of elements which is why I pass it through current