romandkoz
@romandkoz

Как объединить и сложить JSON PHP?

Есть база в которой хранятся строки с json. Требуется собрать все строки в массив и посчитать значения. array_merge пишет что json_decode (с флагом true) не является массивом.

1.{"q1":"a1","q2":"a4","q3":"a4","q4":"a1","q5":"a2","q6":"a2","q7":"a2","q9":"a3","q10":"a2","q11":"a2","q12":"a2","q13":"a2","q14":"a3","q15":""}
2.{"q8":"a3","q10":"a1","q11":"a1","q12":"a1","q13":"a1","q15":""}

Таких строк 80 штук.

На выходе требуется:
q1a1: 5, q1a2: 0, q1a3: 3 и так далее.
  • Вопрос задан
  • 289 просмотров
Решения вопроса 1
romandkoz
@romandkoz Автор вопроса
Решил. Вопрос закрыт.

Полный код

if($result->num_rows > 0){
    $data = array();
    while ($row = $result->fetch_assoc()){
        $data[] = json_decode($row['data'], true);
    }
}
$i = 0;
    foreach ($data as $key => $value) {
       if ($data[$key]['q1'] == 'a1') {
        $i++;
       }
    }
echo $i;



Для простоты использования несколько раз в разных местах закинул все в функцию
Code
$data = array();
if($result->num_rows > 0){
    while ($row = $result->fetch_assoc()){
        $data[] = json_decode($row['data'], true);
    }
}
function jsonCount($question, $answer){
    global $data;
    $i = 0;
    foreach ($data as $key => $value) {
       if ($data[$key][$question] == $answer) {
        $i++;
       }
    }
return $i;
}
echo jsonCount('q1', 'a1');
echo '<br>';
echo jsonCount('q1', 'a2');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы