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

前端 未结 3 1070
無奈伤痛
無奈伤痛 2021-01-02 18:05

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         


        
相关标签:
3条回答
  • 2021-01-02 18:28

    For PHP >= 5.5.0 it is easier with array_column:

    echo array_column($foo, 'text', 'value')[7899];
    

    Or to be repeatable without using array_column each time:

    $bar = array_column($foo, 'text', 'value');
    echo isset($bar[7899]) ? $bar[7899] : 'NOT FOUND!';
    
    0 讨论(0)
  • 2021-01-02 18:34

    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

    0 讨论(0)
  • 2021-01-02 18:34

    Taking a guess at what you would like here:

    function findTextByValueInArray($fooArray, $searchValue){
        foreach ($fooArray as $bar )
        {
            if ($bar['value'] == $searchValue) {
                return $bar['text'];
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题