データの連想配列があり、その配列から削除したいキーの配列があります(残りのキーを元の順序に保ちます-これが制約になる可能性はありません)。
私はこれを行うためにPHPのone linerを探しています.
配列をどのようにループできるかはすでに知っていますが、unset
またはarray_map
解決策を備えたいくつかのarray_filter
があるはずです。
私は少し探しましたが、あまりにも簡潔なものは見つかりませんでした。
明確にするために、これは1行で行うべき問題です:
//have this example associative array of data
$data = array(
'blue' => 43,
'red' => 87,
'purple' => 130,
'green' => 12,
'yellow' => 31
);
//and this array of keys to remove
$bad_keys = array(
'purple',
'yellow'
);
//some one liner here and then $data will only have the keys blue, red, green
$out =
array_diff_key
($data,
array_flip
($bad_keys));
必要なものが見つかるまで(_diff_key
)、 配列関数 のリストを確認するだけでした。
解決策は確かに Niet the Dark Absol によって提供されるものです。同様のことをしたい人に別の同様のソリューションを提供したいのですが、これはblacklistの代わりにwhitelistを使用します:
$whitelist = array( 'good_key1', 'good_key2', ... );
$output = array_intersect_key( $data, array_flip( $whitelist ) );
$whitelist
配列からキーを保持し、残りを削除します。
これは、連想配列用に作成したブラックリスト関数です。
if(!function_exists('array_blacklist_assoc')){
/**
* Returns an array containing all the entries from array1 whose keys are not present in any of the other arrays when using their values as keys.
* @param array $array1 The array to compare from
* @param array $array2 The array to compare against
* @return array $array2,... More arrays to compare against
*/
function array_blacklist_assoc(Array $array1, Array $array2) {
if(func_num_args() > 2){
$args = func_get_args();
array_shift($args);
$array2 = call_user_func_array('array_merge', $args);
}
return array_diff_key($array1, array_flip($array2));
}
}
$sanitized_data = array_blacklist_assoc($data, $bad_keys);