取消设置以预定前缀开头的多个索引
Unsetting several indexes starting with a predetermined prefix
我有一个如下所示的数组:
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']);
}
我现在正在做上面的事情,但是重复太多,有些数组有数千个以相同前缀开头的条目。
这应该适用于给定的前缀。只需 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
和 ARRAY_FILTER_USE_KEY
选项(在 PHP 5.6+ 中可用) 会快得多(在我的测试中是 3-5 倍)。
$new = array_filter($array, function ($key) use ($prefix) {
return strpos($key, $prefix) !== 0;
}, ARRAY_FILTER_USE_KEY);
如果前缀是game.info.campaign
,那么你可以遍历它们并删除具有匹配键的那些:
foreach($result as $key => $val)
if(strpos($key, "game.info.campaign") === 0)
unset($result[$key]);
这会检查 $key
是否以 "game.info.campaign"
开头,使用 PHP strpos()
并取消设置。
看到一个live demo。
我有一个如下所示的数组:
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']);
}
我现在正在做上面的事情,但是重复太多,有些数组有数千个以相同前缀开头的条目。
这应该适用于给定的前缀。只需 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
和 ARRAY_FILTER_USE_KEY
选项(在 PHP 5.6+ 中可用) 会快得多(在我的测试中是 3-5 倍)。
$new = array_filter($array, function ($key) use ($prefix) {
return strpos($key, $prefix) !== 0;
}, ARRAY_FILTER_USE_KEY);
如果前缀是game.info.campaign
,那么你可以遍历它们并删除具有匹配键的那些:
foreach($result as $key => $val)
if(strpos($key, "game.info.campaign") === 0)
unset($result[$key]);
这会检查 $key
是否以 "game.info.campaign"
开头,使用 PHP strpos()
并取消设置。
看到一个live demo。