我正在创建一个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,我做错了什么!
答案 0 :(得分:0)
这只是因为$ i仍然是一个数组。所以你必须迭代它或使用键,实际上它是一个多维数组。
尝试foreach ($eachline as $i => $val) {
$singleline = explode(' ', $val);
答案 1 :(得分:0)
这里不要使用爆炸功能。
您可以使用filter_var或preg_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;
?>
答案 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
数组