2016-07-29 30 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