単純なものです。連想配列から、指定されたキーに一致しないすべての値を返すクリーンで雄弁な方法があるのかと思っていましたか?
$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;
}
これは私が(将来的に)使用しているものですが、よりクリーンな実装はありますか?おそらくマニュアルで見逃したものですか?
あなたはただ unset
値:
$alphaAndGamma = $array;
unset($alphaAndGamma['alpha']);
編集:わかりやすくしました。別の変数に割り当てることで配列をコピーできます。
または関数内:
function arrayExclude($array, Array $excludeKeys){
foreach($excludeKeys as $key){
unset($array[$key]);
}
return $array;
}
この質問は古すぎますが、この質問にはいくつかの回答がありますが、私は誰かに役立つかもしれない解決策を投稿しています。
以下を使用して除外するように定義した特定のキーを除いて、提供された入力からすべての配列要素を取得できます。
$result = array_diff_key($input, array_flip(["SomeKey1", "SomeKey2", "SomeKey3"]));
これにより、キー$input
、SomeKey1
、SomeKey2
を持つSomeKey3
配列から要素が除外され、その他すべての要素が$result
変数に返されます。
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));
編集:=> 0sを追加しました。
$alphaAndGamma = $array;
unset($alphaAndGamma['alpha']);
$onlyBeta = $array;
unset($onlyBeta['alpha'], $onlyBeta['gamma']);
In_arrayを使用するときの速度について、いくつかの議論がありました。このコメントを含めて私が読んだもの 1 から、issetの使用はin_arrayよりも高速です。
その場合、コードは次のようになります。
function arrayExclude($array, array $excludeKeys){
$return = [];
foreach($array as $key => $value){
if(!isset($excludeKeys[$key])){
$return[$key] = $value;
}
}
return $return;
}
これはわずかに高速で、大きなデータセットを処理する必要がある場合に役立ちます。