Wednesday 5 June 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...