![](/img/trans.png)
[英]PHP -modify value of last accessed element in multidimensional associative array
[英]Modify the last element in an array
如何修改数组中的最后一个元素?
该数组如下所示:
$fields = array("firstName = 'Bob', ",
"lastName = 'Smith', ",
"email = 'bob@example.com', ",
"address = '123 anystreet', ");
该数组由脚本生成,该脚本创建值并在每个字符串的末尾添加逗号/空格。 我只想从该数组中的最后一个元素中删除该逗号/空格。 请记住,值实际上可以包含逗号/空格组合,因此只需要删除最后一个元素和最后一个元素的最后两个字符。
我已经查看了end()
函数,但我认为这不会有帮助,因为它只是获取了值。
编辑好的,所以我创建了这个函数/数组,这样我就只有一个 mysql 函数来更新用户。 有点像检测更改功能,它只传回所需/更改的字段。 我没有意识到这种方法存在相关问题。 我认为由于我已经在旧函数中编写了 mysql 查询,因此这种方式应该没有问题。 公众无法访问它所在的文件。 我将使用对我有用的最佳答案,但我将寻找为什么这是有问题的,我将不胜感激关于这种方法有什么问题的评论/链接。 谢谢。
像这样!
end($array);
$key = key($array);
reset($array);
有一种速记方法可以做到这一点,但如果将其分解成碎片,则更容易理解:
$index = count( $fields ) - 1;
$value = $fields[$index];
$fields[$index] = preg_replace( "/,\ $/", "", $value );
要更改最后一个数字元素的值:
$lastValue = array_pop($fields);
$fields[] = rtrim(', ',$lastValue);
如果您正在为查询准备这些值,我建议将没有逗号的所有内容存储在数组中,然后在需要时在该数组上调用 implode 以防止尾随逗号问题
数组弹出和推送是对基本数组执行此操作的最简单方法。 (我知道这在技术上不是问题,但很多人也会来这里寻找与简单数组相关的答案)。
<?php
function update_last(&$array, $value){
array_pop($array);
array_push($array, $value);
}
?>
然后你可以像这样使用这个函数:
<?php
$array = [1,2,3];
update_last($array, 4); //$array = [1,2,4];
?>
有几种方法:
1)对于关联数组,如果不知道最后一个元素的key,最好先找到最后一个元素的key,然后改变它的值。
$array[end((array_keys($array)))] .= ' additional text';
2)如果你不知道也不关心keys,你可以剪掉最后一个元素并创建一个新的。
$array[] = array_pop($array).' additional text';
今天偶然发现了这个。 我认为最简单的非指针破坏方法是:
array_splice($array, -1, 1, strtolower(end(array_values($array))).'blah' );
当然,如果您不必关心指针,您可以删除 array_values。 但我想知道这是否是一个好方法,因为拼接的提取和替换可能比流行音乐或某事要求更高?
数组的最后一个元素总是可以使用array_pop()
检索,无论数组如何索引。 它还将从数组中删除该元素,如果我们想修改然后再次添加它,这将非常有用,因为您无法就地修改元素。
您可以使用简单的单行代码完成您想要做的事情:
$fields[] = preg_replace("/, $/", "", array_pop($fields));
而已。 这是它的作用:
preg_replace()
在字符串中搜索正则表达式模式,如果找到,则用替代字符串替换匹配项。
我们搜索的模式是/, $/
,这意味着:匹配“,”(逗号+空格),但前提是它位于字符串的最末尾( $
)。
替换字符串只是一个空字符串 ( ""
),因此匹配项只是从字符串中删除。
我们要执行替换的字符串是array_pop($fields)
,它是数组$fields
的最后一个元素,它也从该数组中删除。
然后将修改后的字符串重新添加到最后的数组中( $fields[] =
在没有显式键的情况下向数组添加一个元素,并使其成为新的最后一个元素)。
让我们测试一下:
$fields = array(
"firstName = 'Bob', ",
"lastName = 'Smith', ",
"email = 'bob@example.com', ",
"address = '123 anystreet', ");
print "Before:\n\n";
print_r($fields);
$fields[] = preg_replace("/, $/", "", array_pop($fields));
print "\nAfter:\n\n";
print_r($fields);
输出:
Before:
Array
(
[0] => firstName = 'Bob',
[1] => lastName = 'Smith',
[2] => email = 'bob@example.com',
[3] => address = '123 anystreet',
)
After:
Array
(
[0] => firstName = 'Bob',
[1] => lastName = 'Smith',
[2] => email = 'bob@example.com',
[3] => address = '123 anystreet'
)
注意最后一个逗号是如何消失的? 自己试试吧。
我认为 PHP 的Implode函数可能是一个不错的选择,而不是自己生成逗号。
除此之外,您将不得不使用以下内容:
$lastfield = $fields[count($fields)-1];
$lastfield = str_split($lastfield,strlen($lastfield)-2);
$fields[count($fields)-1] = $lastfield;
包含第一行和第三行是为了使第二行更易于阅读,但这很容易合并为一行。
我认为人们正在寻找这个:
@array[-1] =~ s/,$//g;
也适用于换行符:
@array[-1] =~ s/\s$//g;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.