2016-10-03 3 views
0

У меня проблема с удалением объекта из '$ _SESSION' массив. Моя цель - удалить каждый продукт из массива после выбора одного конкретного. Это частичный вид:

<?php     
    for ($i=0; $i < count($this->products); $i++) { 
    echo "<a class='remove_from_basket' href='" .$this->baseUrl. "/shop/delete-product/id/" .$this->products[$i]->product_id. "'>Delete</a>"; 
    }  
?> 

Тогда в PHP части я получаю эту продукцию ID с:

public function deleteProductAction() {  
     $productID = $this->_getParam('id', 0); 
     session_start(); 
     $obj = $_SESSION['products'];  
     foreach ($obj as $key => $product) { 
      if ($product['product_id'] == $productID) { 
       unset($product); 
      } 
     } 
     $_SESSION['products'] = $obj;  
    } 

$ OBJ после printing_r:

Array 
(
    [2] => Zend_Db_Table_Row Object 
     (
      [_data:protected] => Array 
       (
        [product_id] => 26 
       ) 

      [_cleanData:protected] => Array 
       (
        [product_id] => 26 

      [_modifiedFields:protected] => Array 
       (
       ) 

      [_table:protected] => 
      [_connected:protected] => 
      [_readOnly:protected] => 
      [_tableClass:protected] => Application_Model_DbTable_Products 
      [_primary:protected] => Array 
       (
        [1] => product_id 
       ) 

     ) 

    [3] => Zend_Db_Table_Row Object 
     (
      [_data:protected] => Array 
       (
        [product_id] => 26 
       ) 

      [_cleanData:protected] => Array 
       (
        [product_id] => 26 
       ) 

      [_modifiedFields:protected] => Array 
       (
       ) 

      [_table:protected] => 
      [_connected:protected] => 
      [_readOnly:protected] => 
      [_tableClass:protected] => Application_Model_DbTable_Products 
      [_primary:protected] => Array 
       (
        [1] => product_id 
       ) 

     ) 

) 

Однако, ничего не происходит ... Может ли кто-нибудь помочь?

ответ

3

Здесь, в вашем коде, вы просто отключите $product, что полностью не связано с вашей переменной сеанса. Вам нужно использовать index объекта и удалить его в исходном объекте.

foreach ($_SESSION['products'] as $key => $product) { 
    if ($product['product_id'] == $productID) { 
     unset($_SESSION['products'][$key]); 
    } 
} 

Или просто для $obj вы хотите сделать, вы можете сделать так:

foreach ($obj as $key => $product) { 
    if ($product['product_id'] == $productID) { 
     unset($obj[$key]); 
    } 
} 

Приведенный выше код полностью удаляет индекс.

+0

Хорошо, но из этого, при отображении в поле зрения, я получаю уведомление в этом конкретном индексе: Примечание: Неопределенное смещение: 0 – Peter

+0

@Peter Нет никакого способа получить это. Какой блок кода сгенерировал его? –

+0

Первый для цикла. – Peter

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