2009-08-18 14 views
37

में विभाजित करें मैं एक विधि बना रहा हूं ताकि आपके पासवर्ड को कम से कम एक कैप्टियल और एक प्रतीक या संख्या की आवश्यकता हो। मैं तारों को खोने के लिए स्ट्रिंग को विभाजित करने के बारे में सोच रहा था और फिर यदि यह एक पूंजी और प्रतीक/संख्या है तो गिनने के लिए प्रीगमैच का उपयोग करें।PHP: एक स्ट्रिंग को एक सरणी foreach char

हालांकि मैंने एक्शन स्क्रिप्ट में ऐसा कुछ किया लेकिन यह पता नहीं लगा सकता कि इसे php में कैसे कहा जाता है। मैं एक सरणी में एक शब्द के हर चार डाल करने के लिए एक रास्ता नहीं मिल सकता है।

AS3 उदाहरण

for(var i:uint = 0; i < thisWordCode.length -1 ; i++) 
{ 
    thisWordCodeVerdeeld[i] = thisWordCode.charAt(i); 
    //trace (thisWordCodeVerdeeld[i]); 
} 

धन्यवाद, Matthy

+2

क्यों regex emidiately –

+0

http://php.net/manual/en/function.str-split.php – hakre

उत्तर

55

आप उपयोग कर सकते हैं वर्ण वैसे ही जैसे आप एक सरणी अनुक्रमणिका का उपयोग करेंगे, उदाहरण के लिए

$length = strlen($string); 
$thisWordCodeVerdeeld = array(); 
for ($i=0; $i<$length; $i++) { 
    $thisWordCodeVerdeeld[$i] = $string[$i]; 
} 

तुम भी कर सकता है:

$thisWordCodeVerdeeld = str_split($string); 

हालांकि आपको पता चल सकता है कि यह आसान है एक पूरी स्ट्रिंग है, उदा स्ट्रिंग मान्य करने के लिए नियमित अभिव्यक्तियों का उपयोग करना।

+0

अंतिम अनावश्यक सुधार के लिए धन्यवाद :) – matthy

+0

स्क्वायर ब्रैकेट नोटेशन के लिए प्रलेखन: http://php.net /manual/en/language.types.string.php#language.types.string.substr – Pang

+0

स्ट्रेल के बजाए जारी करने का उपयोग करें: '($ i = 0; isset ($ string [$ i]); $ i ++) {' –

15

आप एक स्ट्रिंग [] का उपयोग कर उपयोग कर सकते हैं, जैसा कि आप सरणियों के लिए कार्य करें: में तार में

$stringLength = strlen($str); 
for ($i = 0; $i < $stringLength; $i++) 
    $char = $str[$i]; 
+1

का उपयोग नहीं करते हैं यह multibyte स्ट्रिंग के लिए सही ढंग से काम नहीं करता है: 'éléphant'। http://stackoverflow.com/questions/3666306/how-to-iterate-utf-8-string-in-php –

40

आप str_split के साथ सरणी के लिए एक स्ट्रिंग को बदलने और foreach

$chars = str_split($str); 
foreach($chars as $char){ 
    // your code 
} 
+2

आईएमएचओ यह सबसे अच्छा तरीका है। यह सबसे तेज़ नहीं हो सकता है, लेकिन ज्यादातर अनुप्रयोगों के लिए इससे कोई फर्क नहीं पड़ता। हमारे ऐप में, मापने के लिए गति अंतर भी संभव नहीं था। (वीएस फॉर-लूप।) –

+1

सबसे स्वच्छ समाधान, धन्यवाद – Daniel

+1

यह भी मानते हैं कि यह बेहतर जवाब है, क्योंकि यह –

5

के बाद से str_split() समारोह सुरक्षित multibyte नहीं है का उपयोग कर सकते हैं, एक आसान समाधान विभाजित करने के लिए UTF-8 एन्कोडेड स्ट्रिंग u (PCRE_UTF8) संशोधक के साथ preg_split() उपयोग करने के लिए है।

preg_split('//u', $str, null, PREG_SPLIT_NO_EMPTY) 
1

एक कम पठनीय है, लेकिन बेहतर प्रदर्शन करने वाले समाधान, जब कई तार से अधिक पुनरावृत्ति, स्ट्रिंग के अंत की जाँच करने के isset का उपयोग किया जा सकता है। यह बेहतर प्रदर्शन करने वाले हो सकता है क्योंकि isset एक भाषा निर्माण और strlen एक समारोह है:

for ($i = 0; isset($value[$i]); $i++) { 
    "do something here" 
} 

This question अधिक पृष्ठभूमि प्रदान करना चाहिए।

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