返回除给定键之外的所有数组元素

Dan*_*ugg 19 php associative-array

简单的一点,我只是想知道是否有一种干净而雄辩的方式从一个与给定键不匹配的关联数组中返回所有值?

$array = array('alpha' => 'apple', 'beta' => 'banana', 'gamma' => 'guava');

$alphaAndGamma = arrayExclude($array, array('alpha'));
$onlyBeta      = arrayExclude($array, array('alpha', 'gamma'));

function arrayExclude($array, Array $excludeKeys){
    foreach($array as $key => $value){
        if(!in_array($key, $excludeKeys)){
            $return[$key] = $value;
        }
    }
    return $return;
}
Run Code Online (Sandbox Code Playgroud)

这是我(将要)使用的,但是,是否有更清洁的实现,我可能在手册中遗漏了什么?

Fel*_*ing 26

你可以只是unset价值:

$alphaAndGamma = $array;
unset($alphaAndGamma['alpha']);
Run Code Online (Sandbox Code Playgroud)

编辑:更清楚.您可以通过将数组分配给另一个变量来复制该数组.

或在一个功能:

function arrayExclude($array, Array $excludeKeys){
    foreach($excludeKeys as $key){
        unset($array[$key]);
    }
    return $array;
}
Run Code Online (Sandbox Code Playgroud)


Dev*_*Dev 20

虽然,这个问题太旧了,这个问题有几个答案,但我发布了一个可能对某人有用的解决方案.

您可以从提供的输入中获取所有数组元素,除了您已定义要使用以下内容排除的某些键:

$result = array_diff_key($input, array_flip(["SomeKey1", "SomeKey2", "SomeKey3"]));
Run Code Online (Sandbox Code Playgroud)

这将从$input具有键的数组中排除元素SomeKey1,SomeKey2并将SomeKey3所有其他元素返回到$result变量中.

  • 整洁干净,答案简短而甜蜜 (3认同)

Moo*_*man 13

如果您想要 Laravel 方式,Arr:: except 方法会从数组中删除给定的键/值对:

use Illuminate\Support\Arr;

$array = ['name' => 'Desk', 'price' => 100];

$filtered = Arr::except($array, ['price']);

// ['name' => 'Desk']
Run Code Online (Sandbox Code Playgroud)

@source https://laravel.com/docs/8.x/helpers#method-array- except


lin*_*ogl 11

用途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));
Run Code Online (Sandbox Code Playgroud)

编辑:我添加=> 0s.