更改数组元素但保留索引键,php

时间:2019-03-22 12:32:54

标签: php

我对索引键有一些问题。我有包含网址的数组。所以我需要编辑该数组中的元素。并用新元素更改旧元素。但是新元素带有新的索引键(这很正常。)实际上,我想将旧元素的键传递给新元素。有一个简单的例子说明我在做什么...

我的数组$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"

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

4 个答案:

答案 0 :(得分:4)

尝试一下

.mat-spinner-color::ng-deep circle{
    stroke: #FFFFFF !important;
}

输出

print_r(preg_filter('/$/', 'outline', [
   'helloworld.com/',
   'exampleworld.com/',
   'new-exampleworld.com/',
]));

Sandbox

因此,在您的情况下(preg_filter是一种给数组添加前缀和后缀的技巧):

Array
(
    [0] => helloworld.com/outline
    [1] => exampleworld.com/outline
    [2] => new-exampleworld.com/outline
)

$urls = preg_filter('/$/','outline',$urls); 是一个正则表达式或要匹配的模式。在这种情况下,/$/仅匹配字符串的末尾,第二个参数将其替换为$。基本上,我应该提到您不能真正替换字符串的结尾。字符串结尾加上outline并不能捕获任何要替换的字符,这只是事实,但我离题了。

使用您的原始代码

$

使用foreach($urls as $k => &$val){ $val .= 'outline'; } 通过引用传递,以直接对其进行更新。引用不必太深入,就像是指向实际变量的指针。因此,这基本上表示要使用数组,而不是副本。这样,我们只需分配(或追加)字符串即可,而不必在原始数组中进行任何查找或创建新数组等。

希望有帮助。

答案 1 :(得分:3)

您正在创建新索引,然后删除旧索引。这是正常现象。

如果您只想修改值,则...修改它们

例如:

new Repository not exist

答案 2 :(得分:1)

array_walk可能是一个很好的方法。
您将函数应用于数组的每个成员。所以这段代码:

<?php
    $urls = array( 'helloworld.com/', 'exampleworld.com/', 'new-exampleworld.com/' );
    array_walk($urls, function ( &$item1, $key ) {
        $item1 = $item1 . 'outline';
    });
    print_r( $urls );
?>

将输出以下内容:

Array
(
    [0] => helloworld.com/outline
    [1] => exampleworld.com/outline
    [2] => new-exampleworld.com/outline
)

如果函数需要更复杂或可重用,最好不要像上面那样使用匿名函数。
这样做(如果需要,您可以传递不同的后缀):

    function add_postfix( &$item, $key, $suffix ) {
        $item1 = $item . $suffix;
    };

    array_walk( $urls, 'add_postfix', 'outline' );

答案 3 :(得分:0)

如果您只想修改值并保留索引,则可以在foreach中通过引用进行传递

<?php
$urls =["google"=>"google.com","Facebook.com",1=>"yahoo.com"];

print_r($urls);
// For updating values  

foreach($urls as &$url)
{
    $url = $url ."\\new_url";
}

echo "<br>";
print_r($urls);

?>