簡體   English   中英

PHP數組未設置字符串

[英]PHP array unset string

我試圖取消一組具有相同前綴的數組鍵。 我似乎無法使它正常工作。

foreach ($array as $key => $value) {
    unset($array['prefix_' . $key]);
    }

我該如何取消查看['prefix_'。 $ key]作為實際變量? 謝謝

更新:$ array鍵將有兩個具有相同名稱的鍵。 只有一個具有前綴,並且大約有5個帶有前綴鍵的鍵:

Array {
   [name] => name
   [prefix_name] => other name
}

我不想從數組中刪除[name]只是[prefix_name]。

您不能使用foreach,因為它只是集合的一個副本。 您需要單獨使用for或抓住鍵,並將處理與要操縱的陣列分開。 就像是:

foreach (array_keys($array) as $keyName){
  if (strncmp($keyName,'prefix_',7) === 0){
    unset($array[$keyName]);
  }
}

您還已經遍歷了獲取每個鍵的集合。 除非您有:

$array = array(
  'foo' => 1,
  'prefix_foo' => 1
);

(如果每個鍵前面都有一個匹配的鍵,前面帶有“ prefix_”),您將遇到麻煩。

我不確定我是否理解您的問題,但是如果您嘗試取消所有具有特定前綴的鍵,則可以遍歷數組並僅取消匹配該前綴的鍵。

就像是:

<?php
foreach ($array as $key => $value) {      // loop through keys
    if (preg_match('/^prefix_/', $key)) { // if the key stars with 'prefix_'
        unset($array[$key]);              // unset it
    }
}

這有效:

$array = array(
  'aa' => 'other value aa',
  'prefix_aa' => 'value aa',
  'bb' => 'other value bb',
  'prefix_bb' => 'value bb'
);

$prefix = 'prefix_';
foreach ($array as $key => $value) {
  if (substr($key, 0, strlen($prefix)) == $prefix) {
     unset($array[$key]);
  }
}

如果您在http://writecodeonline.com/php/之類的網站上復制/粘貼此代碼,則可以親眼看到它的工作原理。

您已經在遍歷數組鍵,所以如果您有

$array = (
    'prefix_a' => 'b',
    'prefix_c' => 'd'
     etc...
)

然后$ keys將是prefix_aprefix_c等...您正在做的是生成一個全新的密鑰,它將是prefix_prefix_aprefix_prefix_c等。

除非您要進行更復雜的操作,否則只需將整個循環替換為

$array = array();

我相信這應該有效:

foreach ($array as $key => $value) {
    unset($array['prefix_' . str_replace('prefix_', '', $key]);
}

暫無
暫無

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

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