我有一个如下所示的数组:
Array ( [game.info.campaign.end_date] => 2016-07-31, [game.info.campaign.start_date] => 2016-07-11, [game.info.campaign.peak_date] => 2016-07-21, [game.info.campaign.promo] => 'pokemon_go' );
我想在几行中取消所有这些内容而不重复代码。有没有办法在PHP中执行此操作?
if (array_key_exists('game.info.campaign.end_date', $result)) {
unset($result['game.info.campaign.end_date']);
}
我现在正在做上述事情,但重复次数太多,而且有些数组有数千条以相同前缀开头的条目。
答案 0 :(得分:1)
这应该适用于给定的前缀。只需foreach
数组,然后取消设置以$prefix
开头的键。
$prefix = 'game.info.campaign';
$l = strlen($prefix);
foreach ($array as $key => $value) {
if (substr($key, 0, $l) == $prefix) {
unset($array[$key]);
}
}
或者,如果您不介意制作新数组而不是在原始数组中取消设置键,那么使用带有ARRAY_FILTER_USE_KEY
选项的array_filter
(PHP 5.6+中提供)将会很多更快(在我的测试中3-5倍)。
$new = array_filter($array, function ($key) use ($prefix) {
return strpos($key, $prefix) !== 0;
}, ARRAY_FILTER_USE_KEY);
答案 1 :(得分:1)