Saturday 17 August 2019

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

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...