2009-08-18 5 views
37

パスワードを少なくとも1つのキャプションと1つのシンボルまたは番号にする必要があるメソッドを作成しています。 私は文字列を分割して文字を失うことを考えていました。そして、それが1つの大文字と記号/数字を含んでいるかどうかを調べるためにpreggmatchを使用しました。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

正規表現を使用しない理由 –

+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

最後にawnserを訂正していただきありがとうございます:) – matthy

+0

角括弧記法のドキュメント:http://php.net /manual/en/language.types.string.php#language.types.string.substr – Pang

+0

strlenの代わりにissetを使います: 'for($ i = 0; isset($ string [$ i]); $ i ++){' –

15

使用すると、配列のために行うとしてあなたは、[]を使用して文字列にアクセスすることができます。

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

「éléphant」のようなマルチバイト文字列の場合、正しく動作しません。 http://stackoverflow.com/questions/3666306/how-to-iter-terf-8-string-in-php –

40

あなたはstr_split()関数はマルチバイト安全ではないので、UTF-8でエンコードされた文字列を分割する簡単な解決策はu (PCRE_UTF8)修飾子でpreg_split()を使用することですstr_splitを配列に文字列を変換し、foreachの

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

IMHOこれは一番良い方法です。それは最速ではないかもしれませんが、ほとんどのアプリケーションでは問題ありません。私たちのアプリでは、速度差は測定することさえできませんでした。 –

+1

一番きれいな解決策、ありがとう – Daniel

+1

これはより良い答えであることに同意します。 –

5

を使用することができます。

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

読みにくく、より良いパフォーマンスのソリューションは、多くの文字列を反復処理する場合、文字列の最後をチェックするissetを使用している場合があります。

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

This questionは、より多くの背景を提供する必要があります:issetは言語構造であるとstrlenが関数であるので、これはより高性能であるかもしれません。

関連する問題