簡體   English   中英

如何在PHP中刪除基於鍵名的數組項?

[英]How to remove array item based on key name in PHP?

我想循環使用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 ($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
)

你正在對$domaindata['administrative']做一個foreach ,而不是$domaindata 所以要解開你需要做的事情

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

至於為什么你的循環仍然顯示type ,因為unset不會影響循環(你已經復制了循環變量)。 我建議你在foreach循環之前做這個

if(isset($domaindata['administrative']['type'])) unset($domaindata['administrative']['type']);

然后,您可以完全刪除elseif塊(這將刪除一些開銷)

您正在迭代$domaindata['administrative'] ,而不是$domaindata 因此,您還應該從中unset元素:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM