Php 根据空格将文本区域字符串分组

Php 根据空格将文本区域字符串分组,php,html,forms,textarea,Php,Html,Forms,Textarea,我的html表单中有一个文本区,用户可以在其中输入数字,在表单提交后,php将回显数字的总和 例如,如果我输入 1 2 它将输出 sum is 3 我的要求是,如果我在每套设备之间留出空白(一个或多个),它必须单独处理每套设备 比如说, 1 2 3 4 和以上内容应将输出显示为 sum is 3 sum is 7 sum is 3 sum is 7 但使用下面的代码,我得到的输出如下 sum is 10 我的代码: <html> <body> <di

我的html表单中有一个文本区,用户可以在其中输入数字,在表单提交后,php将回显数字的总和 例如,如果我输入

1
2
它将输出

sum is 3
我的要求是,如果我在每套设备之间留出空白(一个或多个),它必须单独处理每套设备 比如说,

1
2

3
4
和以上内容应将输出显示为

sum is 3
sum is 7
sum is 3
sum is 7
但使用下面的代码,我得到的输出如下

sum is 10
我的代码:

<html>
<body>

<div class="cal-main">
<form  id="form1" name="form1" action=" " method="post" > 

<div class="input">Enter Numbers</div>
<div class="output"><span><textarea class="textarea" name="numbers" ></textarea></span></div>


<div class="submit1">
    <input  id="first_submit" type="submit"  name="first_submit" value="first_submit" />
</div>

</form>


<?php

if (isset($_POST['first_submit']))
{
?>
<textarea onclick="this.select()" name="output_textarea" id="output_textarea" cols="100" rows="25" readonly value="">
<?php
$numbers = $_POST['numbers'];
$digits = explode(PHP_EOL.PHP_EOL, $numbers); // Favor PHP_EOL (end of line) to avoid cross OS issues
foreach($digits as $digit)
{

  $count = array_sum(explode(PHP_EOL, $digit));
  echo "sum is $count".PHP_EOL;
}
}
?>

</textarea>
</div>  
</body>
</html>

输入数字

我会使用
preg\u split
\r?\n

$digits = preg_split('#(\r?\n){2,}#',$numbers); //2 or more \r\n (\r optional)
foreach($digits as $key => $digit)
{

    $count = array_sum(preg_split('#\r?\n#', $digit));
    echo "sum is $count".PHP_EOL;
    if($key < count($digits)-1) echo '<br />';
}

使用preg_split更合适,尽管新行在不同的操作系统上可能会有所不同。我的解决方案:

function split_new_lines($string){
    return preg_split('/\R/', $string);
}

$input = "
1
2

3
4

5
";

$lines = split_new_lines($input);

$sums = array();
$sum = null;
foreach($lines as $line){
    $line = trim($line);
    if(is_numeric($line))
    {
        if($sum === null)
            $sum = (int)$line;
        else
            $sum += (int)$line;
    }
    else
    {
        if($sum !== null)
            $sums[] = $sum;
        $sum = null;
    }
}
if($sum !== null)
    $sums[] = $sum;

请注意,
PHP\u EOL用于以跨平台兼容的方式查找换行符
。我已经在windows/PHP5.4.3中测试了您的代码,其工作原理如上所述。当我拉你的小提琴时,我发现了错误


您是否尝试过用一个简单的旧“\n”替换PHP\u EOL?PHP\u EOL是服务器端EOL,而不是客户端EOL。@Dragony:是的,如果我使用
“\n”
,它只会回显每个数字,显然它应该是“\n\n”。只是为了确定:):谢谢,它起作用了。如果要在每个最终输出之间添加空格,如何添加?我的意思是
sum是3
sum是7
之间的单行间距。我尝试添加一个echo

after
foreach
函数,但它也在开头添加了一个额外的空格。我不想在开头添加空格,而是在每组output@acr请参阅我的更新答案-它现在会在每个答案后添加一个

(最后一个除外)
function split_new_lines($string){
    return preg_split('/\R/', $string);
}

$input = "
1
2

3
4

5
";

$lines = split_new_lines($input);

$sums = array();
$sum = null;
foreach($lines as $line){
    $line = trim($line);
    if(is_numeric($line))
    {
        if($sum === null)
            $sum = (int)$line;
        else
            $sum += (int)$line;
    }
    else
    {
        if($sum !== null)
            $sums[] = $sum;
        $sum = null;
    }
}
if($sum !== null)
    $sums[] = $sum;