我对索引键有一些问题。我有包含网址的数组。所以我需要编辑该数组中的元素。并用新元素更改旧元素。但是新元素带有新的索引键(这很正常。)实际上,我想将旧元素的键传递给新元素。有一个简单的例子说明我在做什么...
我的数组$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"
这里的问题是,接下来要添加新元素。但是实际上,我想用编辑过的内容进行更改。因为我需要保持索引键不变...无论如何,都要做与旧元素添加更改的新元素。不添加下一个。
答案 0 :(得分:4)
尝试一下
.mat-spinner-color::ng-deep circle{
stroke: #FFFFFF !important;
}
输出
print_r(preg_filter('/$/', 'outline', [
'helloworld.com/',
'exampleworld.com/',
'new-exampleworld.com/',
]));
因此,在您的情况下(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);
?>