Не получается удалить элемент из двумерного ассоциативного массива (PHP)

Вот код:

<?php

function getSizeForLimit($a, $b){
    foreach ($a as $array) {
        foreach ($array as $key => $value) {
            if ($key == 's' && $value > $b) {
                unset($array[$key]);
            }
        }
    }
    return $a;

}

$a = array(array("a" => 1, "b" => 2, "c" => 3, "s" => 4.5), array("a" => 4, "b" => 5, "c" => 6, "s" => 27));
$b = 10;
$c = getSizeForLimit($a, $b);
print_r($c);

Не получается удалить двумерный массив содержащий значение 27 под ключом "s". Условный оператор срабатывает на ура, но метод unset не удаляет массив. Пожалуйста, объясните какую ошибку я допустил?


Ответы (1 шт):

Автор решения: Алексей Шиманский

потому что в foreach передаётся копия массива, а не ссылка на него. Поэтому выходов тут миллион. Самый простой и против которого многие будут: добавить на него именно ссылку

foreach ($a as &$array) {
               ^------- ТУТ

второй - делать проход через for

третий - вначале исходный массив положить в $arrayCopy и пробегаться по нему, а удаляться уже из исходного.

и ещё куча способов


Удалить именно массив можно так:

foreach ($a as $key => $array) {
    foreach ($array as $key2 => $value) {
        if ($key2 == 's' && $value > $b) {
            unset($a[$key]);
        }
    }
}
→ Ссылка