цикл по массиву ассоциативных массивов для удаления некоторых данных добавляет неверные данные ко второму элементу

Это результат запроса к БД:

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!
}
}

0

Решение

Блин, по какой-то причине цикл публикует последнюю переменную $ 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);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]