2

我有一个看起来像这样的数组:

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']);
}

我现在正在执行上述操作,但是重复次数过多,并且某些数组有数千个以相同前缀开头的条目。

4

2 回答 2

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_filterARRAY_FILTER_USE_KEY选项(在 PHP 5.6+ 中可用)会更快(在我的测试中为 3-5X)。

$new = array_filter($array, function ($key) use ($prefix) {
    return strpos($key, $prefix) !== 0;
}, ARRAY_FILTER_USE_KEY);
于 2016-07-29T16:03:06.160 回答
1

如果前缀是game.info.campaign,那么您可以遍历它们并删除具有匹配键的那些:

foreach($result as $key => $val)
    if(strpos($key, "game.info.campaign") === 0)
        unset($result[$key]);

这将检查是否$key"game.info.campaign"使用 PHP开头strpos()并取消设置它们。

观看现场演示

于 2016-07-29T16:03:12.343 回答