PHP: Nasıl bir eleman multidemision diziden kaldırabilirim?

2 Cevap

Ben çok boyutlu bir diziye yeni öğeler eklemek için bu kodu vardır:

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

Peki nasıl ben bu diziden bir öğeyi kaldırabilirim? Bu kod çalıştı, ama onun değil çalışma:

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

Ben bu hatayı alıyorum:

  • Warning: in unset Yasadışı ofset tip C:\xampplite\htdocs\katrinelund\classes\TillRepository.php on line 50 />

2 Cevap

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

Yani hile yapmak gerekir.

Update

Alternatif bir yol vardır:

if ( false !== $key = array_search($item, $this->shopcart) )
{
    unset($this->shopcart[$key];
}

Sen endeksleri üzerinde numaralandırma değil, ama orada değerleri, bir dizi indeksi unset, sen değere göre değil, dizin bunu yoketmek zorunda.

Ayrıca, dizi indeksi aslında tamamen döngü ortadan kaldırabilir ProductID ise:

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

Sizin örnek $this->shopcart öğeler ekleme nasıl göstermek değil, ama bu ya da projenin ihtiyaçlarına bağlı için bir seçenek olmayabilir. (Yani sepeti aynı Productıd ait ayrı örneklerini olması gerekir değilse).