0

HTMLフォームにユーザーが数字を入力できるテキストエリアがあり、フォームの送信後、phpは数字の合計をエコーし​​ます。

1
2

それは出力されます、

sum is 3

私の要件は、デバイスの各セットの間に空白 (1 つ以上) を入れる場合、デバイスの各セットを個別に処理する必要があることです。たとえば、

1
2

3
4

以上の出力を次のように表示する必要があります

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>

PHPフィドルのセットアップ

4

4 に答える 4

1

私は使用preg_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 />';
}

出力:

sum is 3
sum is 7
于 2013-08-23T10:05:19.993 に答える
0
$numbers = $_POST['numbers'];

$digits = explode("\n", $numbers); // explode by next line
$sums = array(); // array to put sums in
$i = 0;
foreach($digits as $digit) {
    $digit = trim($digit); // remove next line

    if(is_numeric($digit))
        $sums[$i] += $digit; // sum up
    else
        $i++; // next index (row wasn't number)
}

print_r($sums); 

// Output: Array ( [0] => 3 [1] => 7 )
于 2013-08-23T10:10:14.633 に答える
0

preg_split を使用する方が適切ですが、新しい行は OS によって異なる場合があります。私の解決策:

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;
于 2013-08-23T10:14:37.670 に答える