2016-04-01 3 views
-2

Мне нужно суммировать значения набора результатов, разделенные символом «|» внутри цикла, например. набор значений 10 | 2, 6 | 2, 8 | 1 должен приводить к 24 | 5.php суммировать значения, разделенные специальным символом

вот мой код:

<?php 
$fromdate="2016-03-31"; 
$todate="2016-03-31"; 
$TAG="1"; 
$con = mysqli_connect("XXXXX","XX","XXX","XXX"); 
$query = mysqli_query($con, "CALL sp_Android_Online_Dashboard('$fromdate', '$todate','$TAG')") or die("Query fail: " . mysqli_error()); 
$Totfiles = 0; 
$file_minutes = 0; 
$Tot_minutes=0; 
$Pending=0; 
while(($row = mysqli_fetch_array($query))) 
{ 
    $Totfiles +=$row["Totfiles"]; 
    $file_minutes +=$row["file_minutes"]; 
    $Pending =str_replace(array("/"),"|",$row["Pending"]); //need to sum all the values separated by "|" 
    $Tot_minutes +=$row["Tot_minutes"]; 
} 
$response["Details"]['Totfiles'] = $Totfiles; 
$response["Details"]['file_minutes'] = $file_minutes; 
$response["Details"]['Pending'] = $Pending; 
$response["Details"]['Tot_minutes'] = $Tot_minutes; 
echo json_encode($response);  
?> 

$row["Pending"] contains the values which are to be summed 

результат я получаю сейчас,

"Pending":"16|9" 
"Pending":"11|3" 
"Pending":"6|2" 

мой ожидаемый результат,

"Pending":"33|14" 

ответ

1

Это то, на что вы нацеливаетесь, я думаю, вы делаете массив первым, содержащий 2 значения, на каждой итерации через цикл вы добавляете к ним новые значения, а в конце вы можете снова вставить его в строку

// Start with an array containing 0 twice 
$Totalpending = [0,0]; 
while(($row = mysqli_fetch_array($query))) 
{ 
    // On each loop we add the left value to the first value in the array and the right value to the second value in the array 
    $tmp = explode("|", $row['Pending']); 
    $Totalpending[0] += $tmp[0]; 
    $Totalpending[1] += $tmp[1]; 

    $Totfiles +=$row["Totfiles"]; 
    $file_minutes +=$row["file_minutes"]; 
    $Pending =str_replace(array("/"),"|",$row["Pending"]); //need to sum all the values separated by "|" 
    $Tot_minutes +=$row["Tot_minutes"]; 
} 
// if you want to format the values in the same way again, although an array is much easier to handle, but it's up to you. 
$stringTotalpending = implode('|',$Totalpending); 

строковое значение вы хотите, то будет в $stringTotalpending

0

Итак Во-первых, мы должны взорвать значения от $row["Pending"] ,

$arr = explode("|", $row["Pending"]); 

Теперь использовать цикл, чтобы добавить эти два номера:

$temp = 0; 
for($i = 0; $i < count($arr); $i++){ 
    $temp += (int) $arr[$i]; 
} 

Теперь $temp будет содержать результат.

Простенько.

А также в качестве примечания, ваш код уязвим для атак SQL-Injection.

0

насчет evaling ту же строку с «|» заменен на «+»?

eval('$result = ' . str_replace('|', '+', preg_replace('/[^0-9|]/', '', $row["Pending"])) . ';'); 
echo "$result\n"; 

Примечание. Preg_replace() для дезинфекции ввода. Можно избежать, если вход уже прошел санитарную очистку