删除foreach循环中的数组元素

时间:2012-01-20 14:28:33

标签: php

我有一个简单的数组,其中包含所有国家/地区的名称以及每个国家/地区在我的网站上注册的用户总数。它是这样的:

Array (
    [1] => Array ( [name] => Afghanistan [total] => 3 )
    [2] => Array ( [name] => Albania [total] => 0 )
)

而且,我正在尝试删除拥有0个用户的数组元素(国家/地区)。

我已经尝试使用此代码并且无法正常工作:

foreach($country as $row) {
    if ($row['total'] == 0) {
        unset($row);
    }
}

此代码有什么问题?

3 个答案:

答案 0 :(得分:27)

如果您unset($row)只删除了本地变量。

而是获取密钥并删除它:

foreach ($country as $i => $row) {
    if ($row['total'] == 0) {
        unset($country[$i]);
    }
}

答案 1 :(得分:3)

Foreach会在您循环的数组上创建键/值的副本,因此您所做的只是取消设置本地副本,而不是实际位于数组中的原始副本。直接访问数组

foreach($country as $key => $row) {
  if ($row['total'] == 0) {
     unset($country[$key]);
  }
}

或使用引用,取消设置并在之后过滤NULL元素:

foreach($country as &$row) {
    if ($row['total'] == 0) {
        $row = (unset) $row;
    }
}
unset($row);
$country = array_filter($country);

答案 2 :(得分:0)

因为$ row是值,而不是整个元素。

尝试:     foreach($ country as $ key => $ value){       if($ row ['total'] == 0){         未设置($国家[$关键]);       }     }