2013-08-23 44 views
0

我有一個textarea在我的HTML表單,用戶可以輸入數字和表格後提交,PHP將回聲的數字總和 例如,如果我輸入把一個textarea的字符串成組取決於空白

1 
2 

它將輸出,

sum is 3 

我的要求是,如果我把空格(一個或多個),每個組裝置之間,它有處理每個組設備分別 例如,

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 FIDDLE SETUP

+0

您是否嘗試用簡單的舊「\ n」替換PHP_EOL? PHP_EOL是服務器端的EOL,而不是客戶端的EOL。 – Dragony

+0

@Dragony:是的,如果我用'「\ n」',它只會回顯每個數字 – acr

+0

顯然它應該是「\ n \ n」。只是爲了確保:) – Dragony

回答

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 
+0

:謝謝,它工作。如果我想在每個最終輸出之間添加一個空格,我該如何添加它?我的意思是'總和3'和'總和7'之間的單行距離。我嘗試在'foreach'函數後面添加一個echo'「
」'',但是它在開頭也增加了額外的空間。我不想在開始時添加空格,而是在每組輸出之間添加空格 – acr

+0

@acr See my更新的答案 - 現在每增加一個(
)'後面的(除了最後一個) – SmokeyPHP

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) 
0

使用使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; 
0

注意PHP_EOL is used to find the newline character in a cross-platform-compatible way。我已經在windows/php 5.4.3上測試過你的代碼,它的工作方式如上所述。當我跑你的小提琴時,我得到了錯誤。

your code output