web-dev-qa-db-fra.com

tableau de sélection basé 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 tableau clé jusqu'à la dernière _ afin que je puisse vérifier quelle est la valeur après le dernier trait de soulignement?

28
sea_1987

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...
  }
}
25
oezi

J'ai rencontré un problème similaire récemment. Voici ce que je suis venu avec:

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

vous auriez à 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 la partie if si ce n'est pas l'affaire):

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

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

6
Geoffrey Bachelet

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";
        }
}
3
codaddict
 foreach($myarray as $key=>$value)
    if(count(explode('show_me_',$event_key)) > 1){
         //if array key contains show_me_
    }

Plus d'informations (exemple):

si la clé du tableau contient 'show_me_' 

$ example = explode ('show_me _', 'show_me_120');  

print_r ($ exemple)

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

print_r (count ($ exemple))

2 

print_r ($ exemple [1])

 120 
0
user5510975

filter_array ($ tableau, fonction ($ var) {return (strpos ($ var, 'search_Word')!! == FAUX);},);

return array 'created_key' => 'valeur assignée à la clé'

0
qdras

pour rechercher certaines chaînes dans les clés de tableau, vous pouvez utiliser array_filter();voir documentation

// the array you'll search in
$array = ["search_1"=>"value1","search_2"=>"value2","not_search"=>"value3"];
// filter the array and assign the returned array to variable
$foo = array_filter(
    // the array you wanna search in
    $array, 
    // callback function to search for certain sting
    function ($key){ 
        return(strpos($key,'search_') !== false);
    }, 
    // flag to let the array_filter(); know that you deal with array keys
    ARRAY_FILTER_USE_KEY
);
// print out the returned array
print_r($foo);

si vous recherchez dans les valeurs du tableau, vous pouvez utiliser le drapeau 0 ou laisser le drapeau vide

$foo = array_filter(
    // the array you wanna search in
    $array, 
    // callback function to search for certain sting
    function ($value){ 
        return(strpos($value,'value') !== false);
    }, 
    // flag to let the array_filter(); know that you deal with array value
    0
);

ou

$foo = array_filter(
    // the array you wanna search in
    $array, 
    // callback function to search for certain sting
    function ($value){ 
        return(strpos($value,'value') !== false);
    }
);

si vous recherchez dans les valeurs et les clés de tableau, vous pouvez utiliser l'indicateur ARRAY_FILTER_USE_BOTH.

$foo = array_filter(
    // the array you wanna search in
    $array, 
    // callback function to search for certain sting
    function ($value, $key){ 
        return(strpos($key,'search_') !== false or strpos($value,'value') !== false);
    },
    ARRAY_FILTER_USE_BOTH
);

si vous recherchez les deux, vous devez passer 2 arguments à la fonction de rappel 

0
MidAde