我试图取消设置一组具有相同前缀的数组键。我似乎无法让这个工作。
foreach ($array as $key => $value) {
unset($array['prefix_' . $key]);
}
如何才能看到['prefix_')。 $ key]作为实际变量?感谢
更新:$ array键将有两个具有相同名称的键。只有一个将具有前缀,并且大约有5个带有前缀键的键:
Array {
[name] => name
[prefix_name] => other name
}
我不想从数组中删除[name]只是[prefix_name]。
答案 0 :(得分: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_”)你会遇到麻烦。
答案 1 :(得分: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
}
}
答案 2 :(得分: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/这样的网站上复制/粘贴此代码,您可以亲身体验它是否有效。
答案 3 :(得分:0)
你已经遍历了数组键,所以如果你有
$array = (
'prefix_a' => 'b',
'prefix_c' => 'd'
etc...
)
然后$ key将是prefix_a
,prefix_c
等等......你正在做的是生成一个全新的密钥,它是prefix_prefix_a
,{{1}等等...
除非你做的更复杂,否则你可以用
替换整个循环prefix_prefix_c
答案 4 :(得分:0)
我相信这应该有效:
foreach ($array as $key => $value) {
unset($array['prefix_' . str_replace('prefix_', '', $key]);
}