2015-07-13 2 views
0

У меня есть несколько строк данных на столе, как показано ниже:Пока не сосчитать до последнего элемента массива

+-------------------+-------+ 
| criteria   | value | 
+-------------------+-------+ 
| Pengalaman Kerja |  4 | 
| Pendidikan  |  3 | 
| Usia    |  5 | 
| Status Perkawinan |  2 | 
| Alamat   |  6 | 
| Pengalaman Kerja |  3 | 
| Pendidikan  |  1 | 
| Usia    |  4 | 
| Status Perkawinan |  2 | 
| Alamat   |  1 | 
+-------------------+-------+ 
10 rows in set (0.00 sec) 

Я попытался принести их в PHP с помощью fetch_object(), а затем преобразовать возвращенное данных в массивы и суммировать значения каждого критерия, указанного в таблице. пример: Pengalaman kerja имеет два значения (4 и 3), так что результат для Pengalaman Kerja массива будет 7.

$result  = $db->query($sql); 
$value  = array(); 

while($row=$result->fetch_object()){ 

if(!isset($value[$row->criteria]){ 
    $value[$row->criteria] = 0; 
}) 

    $value[$row->criteria] += $row->value; 

    var_dump($value); 
} 

Когда я побежал var_dump к $value (который теперь содержит суммированное значение каждого критерия) он показал мне:

array(5) { 
    ["Pengalaman Kerja"]=> 
    int(7) 
    ["Pendidikan"]=> 
    int(4) 
    ["Usia"]=> 
    int(9) 
    ["Status Perkawinan"]=> 
    int(4) 
    ["Alamat"]=> 
    int(6) 
} 

Pengalaman kerja правильно, так как 4 + 3 = 7 Pendidikan является правильным, потому что 3 + 1 = 4 Usia является правильным, поскольку 5 + 4 = 9 Status Perkawinan является правильным, потому что 2 + 2 = 4 И неправильно вещь Alamat показать 6, что оно должно быть 7, потому что 6 + 1 = 7

Я уверен, что это потому, что один из Alamat записи был на последней из линий и функция while() не считалась до последней строки. While() Функция только доведена до последнего - 1

Как я могу решить эту проблему, так что Alamat показывает 7, как это предполагается, чтобы показать?

ответ

1

Зачем даже беспокоиться об этом в PHP? Если вам просто нужна сумма всех строк, сгруппированных по criteria, то сделайте это с помощью простого запроса MySQL?

SELECT criteria, SUM(value) AS total FROM table GROUP BY criteria 

EDIT: Если вы настаиваете на делать это ваш путь, то в сторону от нескольких опечаток в вашем коде, которые обычно вызывают ошибки во время выполнения, ваш код должен работать, как ожидалось. Когда я запускаю его против таблицы с точно такими же данными, я получаю ожидаемые результаты.

BTW, PDOStatement не имеет метода, называемый fetch_object (это имя функции хелперов), поэтому если вы хотите использовать метод для извлечения результатов запроса в качестве объекта для PDOStatement вы должны использовать собственное имя, которое fetchObject().

PHP

$result = $dbh->query("SELECT * FROM test"); 
$value = array(); 

while ($row = $result->fetchObject()) { 
    if (!isset($value[$row->criteria])) { 
     $value[$row->criteria] = 0; 
    } 
    $value[$row->criteria] += $row->value; 
} 
var_dump($value); 

Результаты

array (size=5) 
    'Pengalaman Kerja' => int 7 
    'Pendidikan' => int 4 
    'Usia' => int 9 
    'Status Perkawinan' => int 4 
    'Alamat' => int 7 
+0

На самом деле, я сделал с помощью SQL-запрос тоже прежде чем задавать этот вопрос. Просто ищет новые способы :) – januaryananda

+0

Обновлен мой ответ, чтобы включить дополнительную информацию. – brezanac

+0

Не могли бы вы указать мне, что в коде изменилось? Ваш код, написанный выше, похож на мой. Нет никакой разницы – januaryananda

Смежные вопросы