PHP中的数组和添加

时间:2016-02-15 13:35:11

标签: php arrays

我正在创建一个PHP脚本,它从日志文件中读取一些数据,并累加每行中的字节数,例如

log file ($log):

data data data data 3456 data data data

data data data data 4567 data data data

...etc.

我正在使用的代码是:

$eachline = array();
$eachline[] = fgets($log, 1024); //makes each line an element of array
$bandwidth = 0;
$singleline = array();
$i = 0;

foreach ($eachline as $i) {
  if(!empty($i)) {
      $singleline = explode(' ', $i);
      $bandwidth = $singline[4];//assign variable to element 4 the number
      $totalbandwidth +=$bandwidth;//calculate total figure
  }
}
echo"<p>$totalbandwidth</p>"; 

但它一直回归0,我做错了什么!

4 个答案:

答案 0 :(得分:0)

这只是因为$ i仍然是一个数组。所以你必须迭代它或使用键,实际上它是一个多维数组。

尝试foreach ($eachline as $i => $val) {

$singleline = explode(' ', $val);

答案 1 :(得分:0)

这里不要使用爆炸功能。

您可以使用filter_varpreg_replace函数从字符串中获取数值: -

$eachline[] = "data data data data 3456 data data data";
$eachline[] = "data data data data 4567 data data data";
$total = 0;  // define a variable
foreach($eachline as $line) {
      if(!empty($line)) {   
        // get integer value from string     
        $int = filter_var($line, FILTER_SANITIZE_NUMBER_INT);
        // perform addition operation
        $total += $int;
      }
}
echo $total;  // print total

您也可以替换

$int = filter_var($line, FILTER_SANITIZE_NUMBER_INT);

$int = preg_replace("/[^0-9]/","",$line); // using regex

希望它会对你有所帮助:)。

答案 2 :(得分:0)

像这样使用

<?php
 $eachline[] = "data data data data 3456 data data data";
 $eachline[] .= "data data data data 4567 data data data";
$alltotal = 0;
foreach ($eachline as $line) {
      if(!empty($line)) {
        preg_match('!\d+!', $line, $number);
        $alltotal += $number[0];
      }
}
echo $alltotal;
?>

点击此处:https://eval.in/518912

答案 3 :(得分:0)

fgets()返回一个字符串,而不是一个数组。你可以这样做:

$eachline = array();
$totalbandwidth = 0;
while (($line = fgets($log, 1024)) !== false) {
    $eachline[] = $line;

    $singleline = array();
    $bandwidth = 0;

    if (!empty($line)) {
        $singleline = explode(' ', $line);
        $bandwidth = $singleline[4];
        $totalbandwidth += $bandwidth;
    }
}

echo "<p>$totalbandwidth</p>"; 

如果以后不需要这些行,您当然可以删除$eachline数组