karen_west karen_west - 1 year ago 72
PHP Question

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

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 Source

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