2010-08-13 5 views
4

Привет я ВГА электронной сессии, которая выглядит следующим образом:удаление массива из многомерного массива

array(3) { 
    ["counter"]=> 
    int(0) 
    ["currentItem"]=> 
    string(1) "2" 
    ["addedToCart"]=> 
    array(12) { 
    [0]=> 
    array(11) { 
     ["aantal"]=> 
     int(1) 
     ["id"]=> 
     string(1) "1" 
     ["filmtitel"]=> 
     string(11) "a_bugs_life" 
     ["film_id"]=> 
     string(1) "2" 
     ["zaal_id"]=> 
     string(1) "1" 
     ["zaaltitel"]=> 
     string(6) "zaal 1" 
     ["tijdstip"]=> 
     string(8) "15:00:00" 
     ["stoeltjes"]=> 
     string(2) "21" 
     ["dag"]=> 
     string(8) "woensdag" 
     ["verwijder"]=> 
     int(2) 
     ["vertoningId"]=> 
     string(1) "3" 
    } 
    [1]=> 
    array(11) { 
     ["aantal"]=> 
     int(1) 
     ["id"]=> 
     string(1) "1" 
     ["filmtitel"]=> 
     string(11) "a_bugs_life" 
     ["film_id"]=> 
     string(1) "2" 
     ["zaal_id"]=> 
     string(1) "1" 
     ["zaaltitel"]=> 
     string(6) "zaal 1" 
     ["tijdstip"]=> 
     string(8) "15:00:00" 
     ["stoeltjes"]=> 
     string(1) "7" 
     ["dag"]=> 
     string(8) "woensdag" 
     ["verwijder"]=> 
     int(2) 
     ["vertoningId"]=> 
     string(1) "3" 
    } 
    [2]=> 
    array(11) { 
     ["aantal"]=> 
     int(1) 
     ["id"]=> 
     string(1) "1" 
     ["filmtitel"]=> 
     string(11) "a_bugs_life" 
     ["film_id"]=> 
     string(1) "2" 
     ["zaal_id"]=> 
     string(1) "1" 
     ["zaaltitel"]=> 
     string(6) "zaal 1" 
     ["tijdstip"]=> 
     string(8) "15:00:00" 
     ["stoeltjes"]=> 
     string(2) "22" 
     ["dag"]=> 
     string(8) "woensdag" 
     ["verwijder"]=> 
     int(2) 
     ["vertoningId"]=> 
     string(1) "3" 
    } 
    } 
} 

теперь, из $_SESSION['addedToCart] я хотел бы удалить массивы, если они отвечают определенным условиям, например. Я попробовал следующее.

foreach ($_SESSION["addedToCart"] as $arr) { 
     if ($arr["stoeltjes"] == $stoeltje && $arr['film_id'] == $id) { 
      unset($arr); 
     } 
} 

это не кажется, работает, он не удалить что-нибудь, я сделал var_dump, чтобы проверить, если переменные $ stoeltje и $ ID были в порядке, и они были в порядке, так что не может быть проблема. Я могу использовать unset в подобной ситуации?

ответ

5
foreach ($_SESSION["addedToCart"] as &$arr) 

& превращает переменную в ссылку вместо копии. Обычно этого было бы достаточно. unset() работает только с данными в пределах текущей области (так что ваш цикл foreach) оставляет исходный неизменным (подробности см. В unset()).

Вместо этого вы можете сделать:

foreach ($_SESSION["addedToCart"] as $key => $val) 
{ 
    if ($val["stoeltjes"] == $stoeltje && $val['film_id'] == $id) { 
     unset($_SESSION["addedToCart"][$key]); 
    } 
} 
+0

Я изменил его, как вы говорите: foreach ($ _SESSION ["addedToCart"] as & $ arr) { if ($ arr ["stoeltjes" ] == $ stoeltje && $ arr ['film_id'] == $ id) { \t echo "test"; unset ($ arr); } } но он все еще не работает, идентификатор печатает эхо, поэтому я точно попадаю в оператор if. – vincent

+0

@vincent: см. Мой обновленный ответ. – jasonbar

+0

yep, это сработало, tyvm – vincent

1

Это не работает, потому что foreach работает над копией, поэтому $ arr - это всего лишь копия каждого элемента в главной таблице.

из php.net:

По состоянию на PHP 5, вы можете легко изменять элементы массива в предшествующих $ значения с &. Это приведет к назначению ссылки вместо копирования значения.

$arr = array(1, 2, 3, 4); 
foreach ($arr as &$value) { 
    $value = $value * 2; 
} 
// $arr is now array(2, 4, 6, 8) 
+0

Я изменил его, как вы говорите: foreach ($ _SESSION ["addedToCart"] as & $ arr) {if ($ arr ["stoeltjes"] == $ stoeltje && $ arr ['film_id'] == $ id) {ech о «тест»; снята с охраны ($ обр); }}, но он все еще не работает, идентификатор выводит эхо, поэтому я окончательно попадаю в оператор if. – vincent

+0

Да. unsetting $ arr просто удалил ссылку, и основная таблица все еще ссылалась на то же самое. Я исправлю это, но у вас уже есть полный ответ;) – naugtur

1

Попробуйте это:

$arr = array(1, 2, 3, 4); 
foreach ($arr as $key => &$value) { 
    if ($value == 2) 
    { 
     unset($arr[$key]); 
    } 
} 
print_r($arr); 
+0

, который работает, но не знаю, как реализовать это в моем коде – vincent

1

Даже если предложенный способ со ссылкой должен нормально работать, вот пример без него:

foreach ($_SESSION["addedToCart"] as $key => $arr) { 
     if ($arr["stoeltjes"] == $stoeltje && $arr['film_id'] == $id) { 
      unset($_SESSION["addedToCart"][$key]); 
     } 
} 
+0

yep, это сработало, tyvm – vincent

Смежные вопросы