2010-10-14 14 views
26

Ho una matrice e in quell'array ho una chiave di array che assomiglia, show_me_160 questa chiave dell'array potrebbe cambiare leggermente, quindi a volte la pagina potrebbe caricarsi e la chiave dell'array forse show_me_120, Voglio ora è possibile solo stringa abbinare la chiave di serie fino all'ultimo _ in modo che possa controllare quale sia il valore dopo l'ultimo trattino basso?selezionare un tasto array in base alla stringa parziale

+0

può fare un esempio? – Gumbo

+1

usa array_map e una funzione di callback su preg_metch per '#show_me _ ([\ d]) + #' – Hannes

risposta

21

una soluzione che posso pensare:

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

Ho pensato a ciò per cui sto lavorando, ma sospetto che sarebbe dolorosamente lento su enormi matrici. – GordonM

5

si dovrebbe iterare l'array per controllare ogni chiave a parte, dal momento che non si ha la possibilità di interrogare direttamente l'array (sto assumendo la matrice detiene anche le chiavi del tutto estranei, ma si può saltare la parte if se questo non è il caso):

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

Tuttavia, questo suona come un modo molto strano di memorizzare i dati, e se fossi in te, io' d controlla se non c'è un altro modo (più efficiente) di passaggio di dati intorno nell'applicazione;)

+0

Questo funziona per me nella mia situazione, sebbene si noti che questa riga: 'if (strpos ($ k, 'show_me_')! == false)' dovrebbe essere 'if (strpos ($ v, 'show_me_')! == falso) ' – freestate

3

È inoltre possibile utilizzare una soluzione basata 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

mi sono imbattuto in un problema simile di recente. Questo è ciò che mi si avvicinò con:

$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_ 
    } 

Maggiori informazioni (esempio):

se chiave dell'array contiene 'show_me_'

$ esempio = explode ('show_me_',' show_me_120');

print_r ($ esempio)

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

print_r (count ($ esempio))

2 

print_r ($ esempio [1])

120 
+0

Puoi spiegare più in dettaglio cosa significa questo pezzo di codice? –

+0

se la chiave dell'array contiene 'show_me_' $ example = explode ('show_me _', 'show_me_120'); $ esempio: Array ([0] => [1] => 120) count ($ esempio) è: ** 2 ** $ esempio [1] è: ** 120 * * – user5510975

+0

Perché hai bisogno di due funzioni (esploda e conta), se puoi usare sottostringa o strpos? –

Problemi correlati