php foreach计算新行(\ n)

时间:2015-04-12 13:03:25

标签: php string foreach

如果我有一段像这样的代码:

$i = 0;
$names = explode(",", $userInput);
foreach($names as $name) {
    $i++;
}

它完美无缺,只要用户在每个输入html textarea的名称后放置一个逗号即可。但是我想让它更加用户友好并进行更改,以便可以在新行上输入每个名称,并且它将计算用户输入的行数以确定输入到该字段中的名称数量。所以我试过了:

$i = 0;
$names = explode("\n", $userInput);
foreach($names as $name) {
    $i++;
}

但这只是给了我" 1"因此,无论textarea中的新行数量多少。如何使我的爆炸计数新行而不是根据特定输入文本字符串的内容计算?

编辑感谢回答的人,我不相信有任何错误的答案,只有一个比其他代码更适合我的原始代码,并且运行正常。我最终采用了这个并修改它,以便无数空行返回不会导致人为地夸大$ userInput计数。以下是我现在使用的内容:

    if(($userInput) != NULL) {
        $i = 0;
        $names = explode(PHP_EOL, trim($userInput));
        foreach($names as $name) {
            $i++;
        }
    }

它修剪$ userInput中的空白区域,以便仅对有效的行内容执行该函数的其余部分。 :)

4 个答案:

答案 0 :(得分:3)

不要让它变得复杂,你不必将它爆炸成数组,只需使用它:

(只需使用PHP_EOL计算字符串中的新行字符{substr_count()

echo substr_count($userInput, PHP_EOL);

答案 1 :(得分:1)

尝试使用PHP行尾常量PHP_EOL

$names = explode(PHP_EOL, $userInput);

答案 2 :(得分:0)

作为输入的空白​​字符串:

var_dump(explode("\n", ''));

通过调用explode()来给出这个结果:

array(1) { [0]=> string(0) "" }

所以你可以使用三元语句:

$names = $userInput == '' ? array() : explode("\n", $userInput);

答案 3 :(得分:0)

也许您可以使用preg_split更改爆炸功能,以使用正则表达式爆炸用户字符串

$users = preg_split('/[\n\r]+/', $original);

这个想法,但我不在电脑上,所以我无法测试我的代码。 如果它发现了一个或多个换行符,该正则表达式将拆分该字符串。