Reputation: 587
I have a simple array which contains name of all the countries and total number of users registered on my website from that each country. It's something like this:
Array (
[1] => Array ( [name] => Afghanistan [total] => 3 )
[2] => Array ( [name] => Albania [total] => 0 )
)
And, I'm trying to delete array elements (countries) which have 0 users.
I've tried with this code and it's not working:
foreach($country as $row) {
if ($row['total'] == 0) {
unset($row);
}
}
What is wrong with this code?
Upvotes: 7
Views: 16450
Reputation: 360702
Foreach creates copies of the keys/values on the array you're looping over, so all you're doing is unsetting the local copy, not the original that's actually in the array. Either access the array directly
foreach($country as $key => $row) {
if ($row['total'] == 0) {
unset($country[$key]);
}
}
or use a reference, unset it and filter NULL elements afterwards:
foreach($country as &$row) {
if ($row['total'] == 0) {
$row = (unset) $row;
}
}
unset($row);
$country = array_filter($country);
Upvotes: 3
Reputation: 4517
Because $row is the value, not the entire element.
Try: foreach ($country as $key => $value) { if ($row['total'] == 0) { unset($country[$key]); } }
Upvotes: 0
Reputation: 101936
If you unset($row)
you are only removing the local variable.
Instead fetch the key and remove that:
foreach ($country as $i => $row) {
if ($row['total'] == 0) {
unset($country[$i]);
}
}
Upvotes: 26