PHP-स्ट्रिंग वर्णों पर पुनरावृत्त




string character-arrays (5)

क्या स्ट्रिंग के पात्रों पर पुनरावृत्ति करने का कोई अच्छा तरीका है? मैं एक स्ट्रिंग के पात्रों पर foreach , array_map , array_walk , array_filter इत्यादि करने में सक्षम होना चाहता हूं।

कास्टिंग / जॉगलिंग टाइप करें मुझे कहीं भी नहीं मिला (पूरे स्ट्रिंग को सरणी के एक तत्व के रूप में रखें), और मुझे मिला सबसे अच्छा समाधान बस सरणी बनाने के लिए लूप के लिए उपयोग कर रहा है। ऐसा लगता है कि कुछ बेहतर होना चाहिए। मेरा मतलब है, अगर आप इस पर इंडेक्स कर सकते हैं तो क्या आप इसे फिर से शुरू नहीं कर पाएंगे?

यह मुझे सबसे अच्छा मिला है

function stringToArray($s)
{
    $r = array();
    for($i=0; $i<strlen($s); $i++) 
         $r[$i] = $s[$i];
    return $r;
}

$s1 = "textasstringwoohoo";
$arr = stringToArray($s1); //$arr now has character array

$ascval = array_map('ord', $arr);  //so i can do stuff like this
$foreach ($arr as $curChar) {....}
$evenAsciiOnly = array_filter( function($x) {return ord($x) % 2 === 0;}, $arr);

क्या वहां है:

ए) स्ट्रिंग को पुन: प्रयोज्य बनाने का एक तरीका
बी) स्ट्रिंग से वर्ण सरणी बनाने का एक बेहतर तरीका (और यदि हां, तो दूसरी दिशा के बारे में कैसे?)

मुझे लगता है कि मैं यहां कुछ स्पष्ट याद कर रहा हूं।


@ सेबाइट सिस्टम सिस्टम से विस्तारित, आप इसे आजमा सकते हैं:

$s1 = "textasstringwoohoo";
$arr = str_split($s1); //$arr now has character array

Iterate स्ट्रिंग:

for ($i = 0; $i < strlen($str); $i++){
    echo $str[$i];
}

यदि आप केवल इसे एक्सेस करने की आवश्यकता है, तो आप केवल सरणी की तरह $ s1 तक पहुंच सकते हैं:

$s1 = "hello world";
echo $s1[0]; // -> h

यदि आपके तार यूनिकोड में हैं तो आपको preg_split /u modifier के साथ उपयोग करना चाहिए

PHP दस्तावेज़ीकरण में टिप्पणियों से:

function mb_str_split( $string ) { 
    # Split at all position not after the start: ^ 
    # and not before the end: $ 
    return preg_split('/(?<!^)(?!$)/u', $string ); 
} 

// Unicode Codepoint Escape Syntax in PHP 7.0
$str = "cat!\u{1F431}";

// IIFE (Immediately Invoked Function Expression) in PHP 7.0
$gen = (function(string $str) {
    for ($i = 0, $len = mb_strlen($str); $i < $len; ++$i) {
        yield mb_substr($str, $i, 1);
    }
})($str);

var_dump(
    true === $gen instanceof Traversable,
    // PHP 7.1
    true === is_iterable($gen)
);

foreach ($gen as $char) {
    echo $char, PHP_EOL;
}






character-arrays