2010-10-14 3 views
26

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 charger et la clé de tableau peut-être show_me_120, Je veux maintenant est juste possible de faire correspondre la clé de tableau jusqu'à la dernière _ afin que je puisse vérifier quelle est la valeur après le dernier trait de soulignement?sélection d'une clé de tableau basée sur la chaîne partielle

+0

Pouvez-vous donner un Exemple? – Gumbo

+1

utilisez array_map et une fonction de rappel à preg_metch pour '#show_me _ ([\ d]) + #' – Hannes

Répondre

21

une solution que 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... 
    } 
} 
+0

J'ai considéré cela pour ce que je suis en train de faire, mais je pense que ce serait péniblement lent sur les énormes tableaux. – GordonM

5

vous auriez à itérer sur votre tableau pour vérifier chaque clé séparément, puisque vous n'avez pas la possibilité d'interroger directement le tableau (je suppose le tableau contient également des touches totalement sans rapport avec, mais vous pouvez ignorer la if partie 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 je vous, je » d vérifier s'il n'y a pas d'autre moyen (plus efficace) de transmettre les données autour de votre application;)

+0

Cela fonctionne pour moi dans ma situation, mais notez que cette ligne: 'if (strpos ($ k, 'show_me_')! == false)' devrait être 'if (strpos ($ v, 'show_me_')! == false) ' – freestate

3

Vous pouvez également utiliser une solution preg_match:

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

Je suis tombé sur un problème similaire récemment. C'est ce que je suis venu avec:

$value = $my_array[current(preg_grep('/^show_me_/', array_keys($my_array)))]; 
0
foreach($myarray as $key=>$value) 
    if(count(explode('show_me_',$event_key)) > 1){ 
     //if array key contains show_me_ 
    } 

Plus d'informations (par exemple):

si la clé de tableau contient 'show_me_'

$ exemple = explode ('show_me_', » show_me_120 ');

print_r ($ exemple)

Array ([0] => [1] => 120) 

print_r (count ($ exemple))

2 

print_r ($ exemple [1])

120 
+0

Pourriez-vous expliquer plus en détail ce que signifie ce morceau de code? –

+0

si la clé du tableau contient 'show_me_' $ exemple = explode ('show_me _', 'show_me_120'); $ exemple: Array ([0] => [1] => 120) count ($ par exemple) est la suivante: ** 2 ** $ exemple [1] est le suivant: ** 120 * * – user5510975

+0

Pourquoi avez-vous besoin de deux fonctions (exploser et compter), si vous pouvez utiliser des sous-chaînes ou des strpos? –

Questions connexes