如何在PHP中删除基于键名的数组项?

时间:2015-05-19 23:02:29

标签: php arrays loops foreach

我想用foreach遍历一个数组来检查是否存在密钥名称。如果具有该名称的密钥确实存在,我想删除包含它的数组项。

我编写了以下代码,在第一个条件中检查数组项的值,如果数组项的值等于空字符串"" ,则设置该值数组项目为" - " (短划线字符)。第一个条件运作良好。

foreach ($domaindata['administrative'] as $key => $value) {
    if ($value == "") {
      $value = "-";
    } 
    else if ($key == "type") {
      unset ($domaindata[$key]);
    }
    echo "<b>$key: </b>$value<br>";
}

现在我添加了第二个条件,它检查$ key name是否存在,如果存在则删除该数组项。

这是 else if 部分,但该数组项仍然会输出。

else if ($key == "type") {
      unset ($domaindata[$key]);
    }

数组结构如下:

Array
(
    [name] => OWNER NAME
    [address] => OWNER ADDRESS
    [post:number] => OWNER POST OFFICE NUMBER
    [city] => OWNER CITY
    [country] => OWNER COUNTRY CODE
    [telephone] => OWNER TELEPHONE NUMBER
    [fax] => OWNER FAX NUMBER                   // could be empty
    [email] => OWNER EMAIL ADDRESS
    [type] => person
    [user:type] => Fizička osoba
)

2 个答案:

答案 0 :(得分:8)

您在foreach上进行了$domaindata['administrative'],而不是$domaindata。所以要取消设置你需要做的事情

unset($domaindata['administrative'][$key]);

至于为什么你的循环仍然显示type,因为unset不会影响循环(你已经复制了循环变量)。我建议您在foreach循环

之前执行此操作
if(isset($domaindata['administrative']['type'])) unset($domaindata['administrative']['type']);

然后,您可以完全删除elseif块(这将消除一些开销)

答案 1 :(得分:2)

您正在迭代$domaindata['administrative'],而不是$domaindata。因此,您还应该unset元素:

else if ($key == "type") {
  unset ($domaindata['administrative'][$key]);
}