I have a foreach loop set up to go through my array, check for a certain link, and if it finds it removes that link from the array.
My code:
foreach($images as $image)
{
if($image == 'http://i27.tinypic.com/29yk345.gif' ||
$image == 'http://img3.abload.de/img/10nx2340fhco.gif' ||
$image == 'http://i42.tinypic.com/9pp2456x.gif')
{
unset($images[$image]);
}
}
But it doesn't remove the array entires. It's probably something to do with $images[$image]
, as that's not the key of the array entry, only the content? Is there a way to do this without incorporating a counter?
Thanks.
EDIT: Thanks guys, but now I have another problem where the array entries don't actually get deleted.
My new code:
foreach($images[1] as $key => $image)
{
if($image == 'http://i27.tinypic.com/29yk345.gif')
$image == 'http://img3.abload.de/img/10nx2340fhco.gif' ||
$image == 'http://i42.tinypic.com/9pp2456x.gif')
{
unset($images[$key]);
}
}
$images is actuallty a two-dimensional array now hence why I need $images[1]. I have checked and it successfully goes around the array elements, and some elements do actually have some of those URLs in that I wish to delete, but they're not getting deleted. This is my $images
array:
Array
(
[0] => Array
(
[0] => useless
[1] => useless
[2] => useless
[3] => useless
[4] => useless
)
[1] => Array
(
[0] => http://i27.tinypic.com/29yk345.gif
[1] => http://img3.abload.de/img/10nx2340fhco.gif
[2] => http://img3.abload.de/img/10nx2340fhco.gif
[3] => http://i42.tinypic.com/9pp2456x.gif
)
)
Thanks!
One solution would be to use the key of your items to remove them -- you can both the keys and the values, when looping using foreach.
For instance :
Will give you this array, in the end :
Which means that, in your case, something like this should do the trick :
$image
is in your case the value of the item and not the key. Use the following syntax to get the key too:Now you can delete the item with
unset($images[$key])
.You would also need a
after each unset to not skip an element/
Because when you unset
$item[45]
, the next element in the for-loop should be$item[45]
- which was[46]
before unsetting. If you would not do this, you'd always skip an element after unsetting.You can use the index of the array element to remove it from the array, the next time you use the
$list
variable, you will see that the array is changed.Try something like this
To answer the initial question (after your edit), you need to unset($images[1][$key]);
Now some more infos how PHP works: You can safely unset elements of the array in foreach loop, and it doesn't matter if you have & or not for the array item. See this code:
This prints:
So as you can see, if you unset correct thing within the foreach loop, everything works fine.