47 votes

sélection d'une clé de tableau basée sur une chaîne partielle

J'ai un tableau et dans ce tableau, j'ai une clé de tableau qui ressemble à show_me_160 cette clé de tableau peut changer un peu, donc parfois la page peut se charger et la clé de tableau peut-être show_me_120 , je veux maintenant est-il possible de simplement faire correspondre la clé du tableau jusqu'au dernier _ afin que je puisse vérifier quelle est la valeur après le dernier trait de soulignement ?

34voto

oezi Points 27038

une solution à laquelle je peux penser:

 foreach($myarray as $key=>$value){
  if("show_me_" == substr($key,0,8)){
    $number = substr($key,strrpos($key,'_'));
    // do whatever you need to with $number...
  }
}

27voto

Ian Points 592

J'ai rencontré un problème similaire récemment. C'est ce que j'ai trouvé :

 $value = $my_array[current(preg_grep('/^show_me_/', array_keys($my_array)))];

9voto

Geoffrey Bachelet Points 1444

vous devrez parcourir votre tableau pour vérifier chaque clé séparément, car vous n'avez pas la possibilité d'interroger directement le tableau (je suppose que le tableau contient également des clés totalement indépendantes, mais vous pouvez ignorer le if part si ce n'est pas le cas):

 foreach($array as $k => $v)
{
  if (strpos($k, 'show_me_') !== false)
  {
    $number = substr($k, strrpos($k, '_'));
  }
}

Cependant, cela ressemble à une façon très étrange de stocker des données, et si j'étais vous, je vérifierais s'il n'y a pas un autre moyen (plus efficace) de transmettre des données dans votre application ;)

4voto

codaddict Points 154968

Vous pouvez également utiliser une solution basée sur preg_match

 foreach($array as $str) {
        if(preg_match('/^show_me_(\d+)$/',$str,$m)) {
                echo "Array element ",$str," matched and number = ",$m[1],"\n";
        }
}

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