首页 > 解决方案 > 更改数组元素但保留索引键,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"

这里的问题,接下来是添加新元素。但实际上,我想用编辑过的来改变它。因为我需要保持索引键相同......无论如何都要用旧元素添加更改新元素。不添加下一个。

标签: php

解决方案


尝试这个

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';
}

使用&通过引用传递,直接更新它。没有太深的引用就像指向实际变量的指针。所以这基本上说使用数组而不是它的副本。这样我们就可以只分配(或附加)到字符串,我们不必在原始数组中进行任何查找或创建新数组等。

希望能帮助到你。


推荐阅读