PHP: Как мне удалить элемент из массива multidemision? - PullRequest
1 голос
/ 10 ноября 2009

У меня есть этот код для добавления новых элементов в многомерный массив:

$this->shopcart[] = array(productID => $productID, items => $items);

Так как мне удалить элемент из этого массива? Я пробовал этот код, но он не работает:

public function RemoveItem($item)
{
    foreach($this->shopcart as $key)
    {
        if($key['productID'] == $item)
        {
            unset($this->shopcart[$key]);               
        }
    }
}

Я получаю эту ошибку:

  • Предупреждение : недопустимый тип смещения не установлен в C: \ xampplite \ htdocs \ katrinelund \ classes \ TillRepository.php в строке 50

Ответы [ 2 ]

7 голосов
/ 10 ноября 2009
public function RemoveItem($item)
{
        foreach($this->shopcart as $i => $key)
        {
                if($key['productID'] == $item)
                {
                        unset($this->shopcart[$i]);   
                        break;                        
                }
        }
}

Это должно сработать.

Обновление

Существует также альтернативный способ:

if ( false !== $key = array_search($item, $this->shopcart) )
{
    unset($this->shopcart[$key];
}
2 голосов
/ 10 ноября 2009

Вы перечисляете не по индексам, а по значениям, чтобы сбросить индекс массива, вы должны сбросить его по индексу, а не по значению.

Также, если ваш индекс массива на самом деле является productID, вы можете полностью исключить цикл:

public function RemoveItem($productID)
{
    if (isset($this->shopcart[$productID]))
    {
        unset($this->shopcart[$productID]);
    }
}

Ваш пример не показывает, как вы добавляете элементы в $this->shopcart, но этоможет или не может быть вариантом для вас в зависимости от потребностей вашего проекта.(т.е. нет, если вам нужно иметь в корзине отдельные экземпляры одного и того же продукта).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...