Monday, 25 September 2017

php - Deleting from an array




i have an array that looks like this:



Array ( 
[0] => Array (
[id] => 18
[name] => book
[description] =>
[quantity] => 0
[price] => 50

[status] => Brand New
)
[1] => Array (
[id] => 19
[name] => testing
[description] => for testing
[quantity] => 2
[price] => 182
[status] => Brand New
)

[2] => Array (
[id] => 1
[name] => Fruity Loops
[description] => dj mixer
[quantity] => 1
[price] => 200
[status] => Brand New
)
)



I want to be able to delete an entire row in the array (when a user clicks a delete link) say array[1] which is:



[1] => Array ( 
[id] => 19
[name] => testing
[description] => for testing
[quantity] => 2
[price] => 182
[status] => Brand New

)


I have this code where i'm trying to delete based on the id of the product but it doesn't work



//$_SESSION['items'] is the array and $delid is the "product id" gotten when a user clicks  delete on a particular row.
foreach ($_SESSION['Items'] as $key => $products) {
if ($products['id'] == $delid) {
unset($_SESSION['Items'][$key]);
}

}


How do i implement this? Thanks


Answer



You could pass $_session into an ArrayIterator and use ArrayIterator::offsetUnset().



For example:-



session_start();


$_SESSION['test1'] = 'Test1';
$_SESSION['test2'] = 'Test2';
$_SESSION['test3'] = 'Test3';

var_dump($_SESSION);
$iterator = new ArrayIterator($_SESSION);
$iterator->offsetUnset('test2');
$_SESSION = $iterator->getArrayCopy();


var_dump($_SESSION);


Output:-



array (size=3)
'test1' => string 'Test1' (length=5)
'test2' => string 'Test2' (length=5)
'test3' => string 'Test3' (length=5)


array (size=2)
'test1' => string 'Test1' (length=5)
'test3' => string 'Test3' (length=5)


This also saves you the expense of looping through the array to find the element you want to delete.


No comments:

Post a Comment

casting - Why wasn't Tobey Maguire in The Amazing Spider-Man? - Movies & TV

In the Spider-Man franchise, Tobey Maguire is an outstanding performer as a Spider-Man and also reprised his role in the sequels Spider-Man...