Return all array elements except for a given key

后端 未结 7 1322
暖寄归人
暖寄归人 2021-02-02 09:06

Simple one, I was just wondering if there is a clean and eloquent way of returning all values from an associative array that do not match a given key(s)?

$array          


        
相关标签:
7条回答
  • 2021-02-02 09:16

    array_diff_assoc could help. So i.e. you could use

    $onlyBeta = array_diff_assoc($array, array('alpha', 'gamma'))
    
    0 讨论(0)
  • 2021-02-02 09:20

    Use array_diff_key():

    $array = array('alpha' => 'apple', 'beta' => 'banana', 'gamma' => 'guava');
    
    $alphaAndGamma = array_diff_key($array, array('alpha'=>0));
    $onlyBeta      = array_diff_key($array, array('alpha'=>0, 'gamma'=>0));
    

    EDIT: I added =>0s.

    0 讨论(0)
  • 2021-02-02 09:20
    $alphaAndGamma = $array;
    unset($alphaAndGamma['alpha']);
    
    $onlyBeta = $array;
    unset($onlyBeta['alpha'], $onlyBeta['gamma']);
    
    0 讨论(0)
  • 2021-02-02 09:23

    Although, this question is too old and there are several answer are there for this question, but I am posting a solution that might be useful to someone.

    You may get the all array elements from provided input except the certain keys you've defined to exclude using:

    $result = array_diff_key($input, array_flip(["SomeKey1", "SomeKey2", "SomeKey3"]));
    

    This will exclude the elements from $input array having keys SomeKey1, SomeKey2 and SomeKey3 and return all others into $result variable.

    0 讨论(0)
  • 2021-02-02 09:25

    You could just unset the value:

    $alphaAndGamma = $array;
    unset($alphaAndGamma['alpha']);
    

    Edit: Made it clearer. You can copy an array by assigning it to another variable.

    or in a function:

    function arrayExclude($array, Array $excludeKeys){
        foreach($excludeKeys as $key){
            unset($array[$key]);
        }
        return $array;
    }
    
    0 讨论(0)
  • 2021-02-02 09:34

    There have been a few discussions about speed when using in_array. From what I've read, including this comment1, using isset is faster than in_array.

    In that case your code would be:

    function arrayExclude($array, array $excludeKeys){
    
        $return = [];
    
        foreach($array as $key => $value){
            if(!isset($excludeKeys[$key])){
                $return[$key] = $value;
            }
        }
        return $return;
    }
    

    That would be slightly faster, and may help in the event that you're needing to process large datasets.

    0 讨论(0)
提交回复
热议问题