Это результат запроса к БД:
array(2) {
[0] array(21) {
["model_id"] 218
["total"] 10
["make"] "maker_a"["model_name"] "some_name"["picture"] "some_picture.jpg"["color"] "Black"[1] 0
[2] 0
[3] 0
[4] 6
[5] 3
[6] 1
[7] 0
[8] 0
[9] 0
[10] 0
[11] 0
[12] 0
[13] 0
[14] 0
[15] 0
}
[1] array(21) {
["model_id"] 219
["total"] 10
["designer"] "maker_a"["model_name"] "some_other_name"["picture"] "some_other_picture.jpg"["color"] "White"[1] 0
[2] 0
[3] 0
[4] 5
[5] 5
[6] 0
[7] 0
[8] 0
[9] 0
[10] 0
[11] 0
[12] 0
[13] 0
[14] 0
[15] 0
}
}
Я хочу избавиться от элементов со значением = 0, поэтому я попробовал этот цикл:
$results = [];
foreach ($models as $i) {
foreach ($i as $key => $value) {
if ($value != 0 || !is_numeric($value)) {
$result[$key] = $value;
}
}
if (isset($result)) {
$results[] = $result;
}
}
var_dump($results);
но по какой-то причине результат является неправильным, во второй элемент добавляется элемент со значением! = 0, значение, которое правильно присутствует в первом элементе при получении [6] 1
добавил ко второму пункту, где были только [4] 5 и [5] 5. Я не понимаю причину этого результата.
array(2) {
[0] array(9) {
["model_id"] 218
["total"] 10
["makes"] "maker_a"["model_name"] "some_name"["picture"] "some_picture.jpg"["color"] "Black"[4] 6
[5] 3
[6] 1
}
[1] array(9) {
["model_id"] 219
["total"] 10
["designer"] "maker_a"["model_name"] "some_other_name"["picture"] "some_other_picture.jpg"["color"] "White"[4] 5
[5] 5
[6] 1 <---- THIS DOESN'T BELONG HERE!
}
}
Блин, по какой-то причине цикл публикует последнюю переменную $ result в следующем элементе. Решение было добавление unset($result);
после вставки в массив $ results:
$results = [];
foreach ($models as $i) {
foreach ($i as $key => $value) {
if ($value != 0 || !is_numeric($value)) {
$result[$key] = $value;
}
}
if (isset($result)) {
$results[] = $result;
unset($result); // <--- HERE
}
}
var_dump($results);
Других решений пока нет …