2016-07-29 65 views
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']); 
} 

我现在正在做上面的,但是有太多的重复,有些数组有数千个以相同前缀开始的条目。

+1

可以肯定的是,前缀是“game.info.campaign”? –

+0

是否所有的方括号都是'Array()'初始值设定语法?或者是那个伪代码? –

+0

对不起,这是伪代码。 – dms

回答

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至5中我的测试)。

$new = array_filter($array, function ($key) use ($prefix) { 
    return strpos($key, $prefix) !== 0; 
}, ARRAY_FILTER_USE_KEY); 
+0

打我六秒=) –

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()并会取消他们。

查看live demo