Есть массив с данными и нужно получить другой массив, в котором на каждый индекс приходит только значение answer-num или answer-num1-num2.
Array
(
[0] => Array
(
[question_id] => 1
[answer-0] => 1
)
[1] => Array
(
[question_id] => 2
[answer-1] => 6
)
[2] => Array
(
[question_id] => 3
[answer-2] => 12
)
[3] => Array
(
[question_id] => 4
[answer-3] => 13
)
[4] => Array
(
[question_id] => 5
[answer-4] => 18
)
[5] => Array
(
[question_id] => 6
[answer-5-2] => 22
[answer-5-3] => 23
[answer-5-4] => 24
)
[6] => Array
(
[question_id] => 7
[answer-6] => 27
)
[7] => Array
(
[question_id] => 8
[answer-7] => 32
)
[8] => Array
(
[question_id] => 11
[answer-8] => 35
)
[9] => Array
(
[question_id] => 12
[answer-9] => 41
)
)
Таким должен быть результат:
Array
(
[0] => 1
[1] => 6
[2] => 12
[3] => 13
[4] => 18
[5] => 22
[6] => 23
[7] => 24
[8] => 27
[9] => 32
[10] => 35
[11] => 41
)
То, как я пытался это реализовать, до этого и обычным циклом for(). Проблема этого кода в громоздкости, а так же не получается задать правильный индекс после answer-num1-num2, потому что нужно перебрать ещё дополнительное значение, второй цикл не позволяет правильно задать индекс, из-за чего одно значение заменяет другое и в итоге выводятся не полные данные.
function getScore()
{
$data = $_POST['data'];
$db = DB::connect();
$n = 0;
$i = 0;
foreach ($_POST['data'] as $val)
{
if(isset($val['answer-'.$i]))
{
$n++;
$sql = "SELECT `score` FROM `answers` WHERE `id` = ?";
$stmt = $db->prepare($sql);
$stmt->execute([$val['answer-'.$i]]);
$result[$n] = $stmt->fetch(PDO::FETCH_NUM);
}
else
{
for ($j = 0;$j <= 6;$j++)
{
if(isset($val['answer-'.$i.'-'.$j]))
{
$sql = "SELECT `score` FROM `answers` WHERE `id` = ?";
$stmt = $db->prepare($sql);
$stmt->execute([$val['answer-'.$i.'-'.$j]]);
$result[$n] = $stmt->fetch(PDO::FETCH_NUM);
}
}
}
$n++;
$i++;
}
return $result;
}