91 votes

PHP - récupère toutes les clés d'un tableau commençant par une certaine chaîne

J'ai un tableau qui ressemble à ceci:

 array(
'abc' => 0
'foo-bcd' => 1
'foo-def' => 1
'foo-xyz' => 0
...
)
 

Comment obtenir uniquement les éléments qui commencent par foo- ?

144voto

erisco Points 6101

Approche fonctionnelle:

Choisissez une sorte de fonction array_filter_key partir des commentaires dans http://php.net/array_filter ou écrivez les vôtres. Ensuite...

 $array = array_filter_key($array, function($key) {
    return strpos($key, 'foo-') === 0;
});
 

Approche procédurale:

 $only_foo = array();
foreach ($array as $key => $value) {
    if (strpos($key, 'foo-') === 0) {
        $only_foo[$key] = $value;
    }
}
 

Approche procédurale utilisant des objets:

 $i = new ArrayIterator($array);
$only_foo = array();
while ($i->valid()) {
    if (strpos($key, 'foo-') === 0) {
        $only_foo[$i->key()] = $i->current();
    }
    $i->next();
}
 

20voto

biziclop Points 9290

Depuis PHP 5.3, vous pouvez utiliser la fonction preg_filter :

http://www.php.net/manual/en/function.preg-filter.php

 $unprefixed_keys = preg_filter('/^foo-(.*)/', '$1', array_keys( $arr ));

// Result:
// $unprefixed_keys === array('bcd','def','xyz')
 

19voto

SiD Points 253
$arr_main_array = array('foo-test' => 123, 'other-test' => 456, 'foo-result' => 789);

foreach($arr_main_array as $key => $value){
    $exp_key = explode('-', $key);
    if($exp_key[0] == 'foo'){
         $arr_result[] = $value;
    }
}

if(isset($arr_result)){
    print_r($arr_result);
}

14voto

Tim Cooper Points 55292
foreach($arr as $key => $value)
{
   if(preg_match('/^foo-/', $key))
   {
        // You can access $value or create a new array based off these values
   }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X