2010-10-14 17 views
26

पर आधारित एक सरणी कुंजी का चयन करना मेरे पास एक सरणी है और उस सरणी में मेरे पास एक सरणी कुंजी है जो show_me_160 जैसा दिखता है, यह सरणी कुंजी थोड़ा बदल सकती है, इसलिए कभी-कभी पृष्ठ लोड हो सकता है और सरणी कुंजी शायद show_me_120 हो सकती है, मैं अब अंतिम _ तक सरणी कुंजी को स्ट्रिंग करना संभव है ताकि मैं जांच कर सकूं कि आखिरी अंडरस्कोर के बाद मूल्य क्या है?आंशिक स्ट्रिंग

+0

आप एक दे सकते हैं उदाहरण? – Gumbo

+1

'_show_me _ ([\ d]) + # ' – Hannes

उत्तर

21

एक समाधान मैं के बारे में सोच सकते हैं:

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

के लिए preg_metch पर array_map और कॉलबैक फ़ंक्शन का उपयोग करें, मैंने इसे जो काम किया है उसके लिए मैंने माना लेकिन मुझे संदेह है कि यह विशाल सरणी पर दर्दनाक रूप से धीमा होगा। – GordonM

5

आप अपने सरणी पर पुनरावृति करने के लिए अलग से प्रत्येक कुंजी की जाँच करने के लिए होगा, क्योंकि आप सीधे सरणी क्वेरी करने के लिए संभावना नहीं है (मैं यह सोचते हैं रहा हूँ सरणी भी पूरी तरह से असंबंधित कुंजी रखती है, लेकिन आप if भाग को छोड़ सकते हैं, तो उस मामले) नहीं है:

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

हालांकि, इस डेटा भंडारण की एक बहुत ही अजीब तरीके से की तरह लगता है, और अगर मैं तुम्हें थे, मैं डी जांचें कि क्या कोई अन्य तरीका नहीं है (अधिक कुशल)

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

यह मेरी स्थिति में मेरे लिए काम करता है, हालांकि ध्यान दें कि यह पंक्ति: 'if (strpos ($ k, 'show_me_')! == false) 'होना चाहिए' अगर (स्ट्रॉप्स ($ v, 'show_me_')! == झूठा) ' – freestate

3

तुम भी एक preg_match आधारित समाधान का उपयोग कर सकते हैं।

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

मैं हाल ही में एक ऐसी ही समस्या का सामना किया: अपने आवेदन में चारों ओर डेटा पास करने का)

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

अधिक जानकारी (उदाहरण):: यह है कि मैं क्या लेकर आए हैं

यदि सरणी कुंजी 'show_me_' शामिल

$ उदाहरण = विस्फोट ('show_me_', ' show_me_120 ');

print_r ($ उदाहरण)

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

print_r (गिनती ($ उदाहरण))

2 

print_r ($ उदाहरण [1])

120 
+0

क्या आप विस्तार से समझा सकते हैं कि कोड का यह टुकड़ा क्या है? –

+0

यदि सरणी कुंजी में 'show_me_' $ example = विस्फोट ('show_me _', 'show_me_120') शामिल है; $ उदाहरण है: सरणी ([0] => [1] => 120) गिनती ($ उदाहरण) है: ** 2 ** $ उदाहरण [1] है: ** 120 * * – user5510975

+0

यदि आप सबस्ट्रिंग या स्ट्रॉप्स का उपयोग कर सकते हैं, तो आपको दो कार्यों (विस्फोट और गिनती) की आवश्यकता क्यों है? –

संबंधित मुद्दे