2016-07-29 5 views
2

Ich habe ein Array, das wie folgt aussieht:Entschärfen mehr Indizes mit einem vorgegebenen Präfix beginnen

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

würde Ich mag sie alle in ein paar Linie unscharf zu schalten, ohne Code zu wiederholen. Gibt es eine Möglichkeit, dies in PHP zu tun?

if (array_key_exists('game.info.campaign.end_date', $result)) { 
    unset($result['game.info.campaign.end_date']); 
} 

Ich tue das oben im Moment, aber es gibt zu viel Wiederholung und einige Arrays haben Tausende von Einträgen, die mit demselben Präfix beginnen.

+1

Nur um sicher zu gehen, ist das Präfix "game.info.campaign"? –

+0

Ist die 'Array() 'Initialisierersyntax mit allen eckigen Klammern gültig? Oder ist das Pseudocode-ish? –

+0

Entschuldigung, es ist Pseudocode-ish. – dms

Antwort

1

Dies sollte für ein gegebenes Präfix funktionieren. Nur foreach über die Array- und Unset-Tasten, die mit $prefix beginnen.

$prefix = 'game.info.campaign'; 
$l = strlen($prefix); 

foreach ($array as $key => $value) { 
    if (substr($key, 0, $l) == $prefix) { 
     unset($array[$key]); 
    } 
} 

Oder, wenn Sie nichts dagegen haben ein neues Array zu machen, anstatt unsetting Schlüssel in der ursprünglichen Anordnung, mit array_filter mit der ARRAY_FILTER_USE_KEY Option (erhältlich in PHP 5.6+) viel schneller (3-5mal in meine Tests).

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

Beat mich um sechs Sekunden =) –

1

Wenn das Präfix game.info.campaign, dann über sie können Sie Schleife und die mit passenden Schlüssel löschen:

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

die $key mit "game.info.campaign"strpos() und führt zum Löschen sie mit PHP beginnt.

Siehe eine live demo.

Verwandte Themen