PHP数组未设置字符串


PHP array unset string

我试图取消设置一组具有相同前缀的数组键。我似乎不能使这个工作。

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

我怎样才能取消设置看到['prefix_'。$key]作为实际变量?由于

UPDATE: $array的键将有两个相同名称的键。只有一个会有前缀,大约有5个带前缀的键:

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

我不想从数组中删除[name]只是[prefix_name]

这行得通:

$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/的站点,您可以自己看到它的工作原理。

不能使用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 = (
    'prefix_a' => 'b',
    'prefix_c' => 'd'
     etc...
)

则$keys将是prefix_a, prefix_c,等等…您正在做的是生成一个全新的密钥,它将是prefix_prefix_a, prefix_prefix_c等…

除非你要做更复杂的事情,你可以用

替换整个循环
$array = array();

我相信这应该能行:

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