web-dev-qa-db-ja.com

PHP:文字列を配列foreach charに分割します

パスワードに少なくとも1つの大文字と1つの記号または数字が必要になるようにメソッドを作成しています。文字列を分割して文字を失い、preggmatchを使用して、大文字と記号/数字が1つ含まれているかどうかをカウントすることを考えていました。

しかし、私はアクションスクリプトでこのようなことをしましたが、これがPHPでどのように呼び出されるのかわかりません。 Wordのすべての文字を配列に入れる方法が見つかりません。

AS3の例

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

ありがとう、マシー

46
matthy

配列インデックスにアクセスするのと同じ方法で、文字列内の文字にアクセスできます。

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

次のこともできます。

$thisWordCodeVerdeeld = str_split($string);

ただし、文字列全体を文字列として検証する方が簡単な場合があります。正規表現を使用します。

67
Tom Haigh

str_split で文字列を配列に変換し、foreachを使用できます

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

配列の場合と同様に、[]を使用して文字列にアクセスできます。

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

str_split()関数はマルチバイトに対して安全ではないため、UTF-8エンコード文字列を分割する簡単な解決策は、 preg_split() with u (PCRE_UTF8) 修飾子。

preg_split( '//u', $str, null, PREG_SPLIT_NO_EMPTY )
8
Danijel

多くの文字列を繰り返し処理する場合、読みにくくはなりますが、パフォーマンスが向上するソリューションは、issetを使用して文字列の終わりを確認することです。 issetは言語構成体であり、strlenは関数であるため、パフォーマンスが向上する可能性があります。

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

この質問 はより多くの背景を提供する必要があります。

2
Technomad