0

我正在尝试取消设置一组具有相同前缀的数组键。我似乎无法让它工作。

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

我如何才能看到 ['prefix_' 。$key] 作为实际变量?谢谢

更新: $array 键将有两个具有相同名称的键。只有一个具有前缀,并且大约有 5 个带有前缀键的键:

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

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

4

5 回答 5

1

您不能使用 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_”)你会遇到麻烦。

于 2011-10-12T20:36:53.373 回答
1

我不确定我是否理解您的问题,但是如果您尝试取消设置具有特定前缀的所有键,则可以遍历数组并取消设置与前缀匹配的键。

就像是:

<?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
    }
}
于 2011-10-12T20:41:42.477 回答
1

这有效:

$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/之类的网站上复制/粘贴此代码,您可以亲眼看到它有效。

于 2011-10-12T21:05:47.463 回答
0

你已经在遍历数组键了,所以如果你有

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

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

除非您正在做更复杂的事情,否则您可以将整个循环替换为

$array = array();
于 2011-10-12T20:36:36.990 回答
0

我相信这应该有效:

foreach ($array as $key => $value) {
    unset($array['prefix_' . str_replace('prefix_', '', $key]);
}
于 2011-10-12T20:36:59.257 回答