PHP: 将字符串分割成字符数组

68

我正在编写一个方法,使您的密码至少需要一个大写字母和一个符号或数字。 我想将字符串拆分为单个字符,然后使用preggmatch计算它是否包含一个大写字母和一个符号/数字。

然而,我在ActionScript中做了类似的事情,但无法弄清楚在PHP中如何称呼它。我找不到将单词的每个字符放入数组中的方法。

AS3示例

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

谢谢, Matthy


http://php.net/manual/en/function.str-split.php - hakre
5个回答

95

您可以使用str_split将字符串转换为数组,然后使用foreach。

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

2
在我看来,这是最好的方法。它可能不是最快的,但对于大多数应用程序来说,速度并不重要。在我们的应用程序中,速度差异甚至无法测量。(与for循环相比)。 - Prof. Falken
1
也同意这是更好的答案,因为它更直接地回答了问题。 - Brian Leishman
1
请注意,如果 $str 是一个空字符串,str_split 将返回 [""] - Josh Johnson
1
这仍然是最好的答案。只是现在最好使用mb_str_split来正确处理多字节字符串。 - SeparateReality

81
你可以像访问数组下标一样访问字符串中的字符,例如:
$length = strlen($string);
$thisWordCodeVerdeeld = array();
for ($i=0; $i<$length; $i++) {
    $thisWordCodeVerdeeld[$i] = $string[$i];
}
你也可以这样做:
$thisWordCodeVerdeeld = str_split($string);

不过你可能会发现,将字符串作为一个整体进行验证更容易,例如使用正则表达式。


方括号符号注解文档:http://php.net/manual/zh/language.types.string.php#language.types.string.substr - Pang
1
使用 isset 替代 strlen:for ($i=0; isset($string[$i]); $i++) { - Melo Waste
$thisWordCodeVerdeeld = str_split($string);这是将字符串字符分离并将它们放入数组中的完美答案。 - Umar Niazi

16

由于str_split()函数不支持多字节,拆分UTF-8编码的字符串的简单解决方案是使用带有u (PCRE_UTF8)修饰符的preg_split()函数。

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

15

您可以使用[]来访问字符串,就像访问数组一样:

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

3
这段代码无法正确处理多字节字符串,例如:'éléphant'。https://dev59.com/ZnA65IYBdhLWcg3wuhIR - David Silva Smith

1

尝试这个,它适用于UTF8字符(库尔德语,波斯语和阿拉伯语):

<?php
$searchTerm = "هێڵەگ";
$chars = preg_split("//u", $searchTerm, -1, PREG_SPLIT_DELIM_CAPTURE);
foreach($chars as $char){echo $char."<br>";}
?>

PREG_SPLIT_DELIM_CAPTURE?你没有使用任何捕获组! - mickmackusa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接