我想用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
)
答案 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]);
}