php - 更改数组元素但保留索引键,php
问题描述
我有一些关于索引键的问题。我有包含 url 的数组。所以我需要编辑该数组中的元素。并用新元素改变旧元素。但是新元素带有新的索引键(这是正常的事情。)实际上,我想将旧元素的键传递给新元素。我在做什么有一个简单的例子......
我的数组$urls
在下面。
[0]=>
string(34) "helloworld.com/"
[1]=>
string(34) "exampleworld.com/"
[2]=>
string(26) "new-exampleworld.com/"
现在编辑和取消设置旧元素。
foreach($urls as $k => $val){
$urls[] = $val . outline;
unset($urls[$k]);
}
所以输出就像
[3]=>
string(34) "helloworld.com/outline"
[4]=>
string(34) "exampleworld.com/outline"
[5]=>
string(26) "new-exampleworld.com/outline"
这里的问题,接下来是添加新元素。但实际上,我想用编辑过的来改变它。因为我需要保持索引键相同......无论如何都要用旧元素添加更改新元素。不添加下一个。
解决方案
尝试这个
print_r(preg_filter('/$/', 'outline', [
'helloworld.com/',
'exampleworld.com/',
'new-exampleworld.com/',
]));
输出
Array
(
[0] => helloworld.com/outline
[1] => exampleworld.com/outline
[2] => new-exampleworld.com/outline
)
所以在你的情况下(preg_filter 是一种前缀,后缀数组的技巧):
$urls = preg_filter('/$/','outline',$urls);
这/$/
是一个正则表达式,或要匹配的模式。在这种情况下$
,只匹配字符串的结尾,第二个参数将其替换为outline
. 基本上,我应该提到你不能真正替换字符串的结尾。字符串结束只是一个事实,加上$
没有捕获任何要替换的字符......但我离题了。
在您的原始代码中
foreach($urls as $k => &$val){
$val .= 'outline';
}
使用&
通过引用传递,直接更新它。没有太深的引用就像指向实际变量的指针。所以这基本上说使用数组而不是它的副本。这样我们就可以只分配(或附加)到字符串,我们不必在原始数组中进行任何查找或创建新数组等。
希望能帮助到你。