2010-10-14 20 views
26

Ben bir dizi var ve bu dizi gibi bir dizi anahtar var, show_me_160 bu dizi anahtar biraz değişebilir, bu yüzden bazen sayfa yükleyebilir ve dizi anahtar belki show_me_120, şimdi sadece dize maç mümkün olmak istiyorum dizinin son _'e kadar kilitlenmesini sağlayın, böylece değerin son alt çizgiden sonra ne olduğunu kontrol edebilirim?kısmi dizgeye dayalı bir dizi anahtarı seçmek

+0

Bir verebilir ([1] $ örnek) örnek? – Gumbo

+1

array_map ve '#show_me _ ([\ d]) + #' – Hannes

cevap

21

tek çözüm: (I varsayarak doğrudan diziyi sorgulamak imkanı olmadığı için

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

için preg_metch işlevine bir geriçağırım işlevi kullanın, üzerinde çalıştığım şey için bunu düşündüm ama büyük dizilerde ağrılı bir şekilde yavaş olacağından şüpheleniyorum. ! '(! Strpos ($ k 'show_me_') == false)' 'olmalı if (strpos ($ v eğer, 'show_me_') ==: – GordonM

5

Eğer ayrı ayrı anahtar kontrol etmek için diziyi sürekli tekrarlanması gerekir dizi de tamamen alakasız anahtarlarını tutan, ancak bu durumda) değil eğer if bölümü atlayabilirsiniz: ancak

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

, bu verileri depolamak çok garip bir yol gibi geliyor, ve senin yerinde olsaydım, ben d Başka bir yol olmadığını kontrol edin (daha verimli)

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

Bu notu olsa bu hat olduğunu, benim durumumda benim için çalışıyor yanlış) ' – freestate

3

Ayrıca preg_match tabanlı çözümü kullanabilirsiniz.

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

Geçenlerde benzer bir sorun koştu:; uygulamanızda etrafında verileri geçme)

0
foreach($myarray as $key=>$value) 
    if(count(explode('show_me_',$event_key)) > 1){ 
     //if array key contains show_me_ 
    } 

Daha bilgi (örnek): Bu benim ile geldi budur

dizi anahtarı 'show_me_' içeriyorsa

$ örneği = ('show_me_' patlayabilir,' show_me_120');

print_r ($ örneği)

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

print_r (sayım ($ örneği))

2 

print_r

120 
+0

kod bu parça ne anlama geldiğini daha detaylı bir şekilde açıklayabilir misiniz? dizi anahtarı $ örnek 'show_me_' içeriyorsa –

+0

= patlayabilir ('show_me _' 'show_me_120'); $ örneğidir: Array ([0] => [1] => 120) sayısı ($ örneğin) aşağıdaki gibidir: ** 2 ** $ örneğin [1] olduğu: ** 120 * * – user5510975

+0

Neden Gereklidir iki işlev Eğer alt dize veya strpos kullanabilirsiniz eğer, (patlayabilir ve sayım)? –

İlgili konular