PHP:如何逐个获取字符串字符

9
$str = "8560841836";
$mystr = array($str);
$string = strlen($str);
for($i=0; $i<=$string; $i++){   echo $string[$i]."\n";  }

这段代码将字符串打印在一行上,但我希望它能够每次只打印一个字符,然后换到下一行打印下一个字符...


1
可能是PHP-迭代字符串字符的重复问题。 - joerick
6个回答

12

根据 PHP 文档

通过使用方括号指定所需字符的从零开始的偏移量来访问和修改字符串中的字符,例如 $str[42]。可以将字符串视为此目的的字符数组。当您想要提取或替换多个字符时,可以使用函数 substr() 和 substr_replace()。

注意:也可以使用花括号(大括号)访问字符串,例如 $str{42},目的相同。

警告:在内部,PHP 字符串是字节数组。因此,使用数组括号访问或修改字符串不是多字节安全的,并且只应使用单字节编码(如 ISO-8859-1)的字符串进行操作。

Examples:

// Get the first character of a string
$str = 'This is a test.';
$first = $str[0]; // 't'

// Get the third character of a string
$third = $str[2]; // 'i'

// Get the last character of a string.
$str = 'This is still a test.';
$last = $str[strlen($str)-1];  // '.'

// Modify the last character of a string
$str = 'Look at the sea';
$str[strlen($str)-1] = 'e'; // 'Look at the see'

So in your case, it is very easy:

$str = '8560841836';
$len = strlen($str);

for($i = 0; $i < $len; ++$i) // < and not <=, cause the index starts at 0!
    echo $str[$i]."\n";


1
PHP有str_split()函数,用于打印字符串的每个字符。不需要使用任何循环。@user3414654的答案是正确的。 - Saroj
1
不过这是一个不错的 PHP5 之前的脚本。 - Parapluie
1
C语言的习惯往往会持续下去! - Linblow
3
$first 不是 'T' 的原因是什么? - Teepeemm

6

有一个函数str_split('字符串')。它返回:

array(6) {
  [0]=>
  string(1) "s"
  [1]=>
  string(1) "t"
  [2]=>
  string(1) "r"
  [3]=>
  string(1) "i"
  [4]=>
  string(1) "n"
  [5]=>
  string(1) "g"
}

您可以传递第二个参数来设置每块的最大长度。

例如:str_split('string', 2) 将返回:

array(3) {
  [0]=>
  string(2) "st"
  [1]=>
  string(2) "ri"
  [2]=>
  string(2) "ng"
}

php.net 上有 str_split 的文档


2

您将字符串与字符串长度混淆了。

此外,您可以使用$string{$i}代替$string[$i]

最后,请注意循环的结束条件(使用$i<$lenght而不是$i<=$lenght)。

以下代码可行:

<?php
$str = "8560841836";
$lenght = strlen($str);
for($i=0; $i<$lenght; $i++){   
    echo $str[$i]."\n";
}
?>

1
@deceze $str[$i] 是可行的,但我认为推荐使用 $str{$i}。我会研究一下。 - Gwenc37
不,它既不被推荐也不被不推荐。http://www.php.net/manual/en/language.types.string.php#language.types.string.substr - deceze

0

尝试使用这段代码

$str = "8560841836";
$mystr = array($str);
$string = strlen($str);
for($i=0; $i<=$string; $i++){   echo $str[$i]."<br>";  }

0
<?php
    $str = "Split Me !";
    $start = 0;
    for ($x = $start; $x < strlen($str); $x++) {
        echo $str[$x];
    }
?>

-1
使用explode("", $data)(请参考此引用)来分割字符串并遍历结果。
$str = "8560841836";
$mystr = explode($str);
foreach( $mystr as $string){ 
    echo $string."\n"; 
}

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