从数组中最后一个元素的末尾删除不需要的字符


Trim unwanted characters from the end of the last element in an array

如何修改数组中的最后一个元素?

数组是这样的:

$fields = array("firstName = 'Bob', ",
                "lastName = 'Smith', ",
                "email = 'bob@example.com', ",
                "address = '123 anystreet', ");

该数组由脚本生成,该脚本创建值并在每个字符串的末尾添加逗号/空格。我想从数组的最后一个元素中删除逗号/空格。请记住,这些值实际上可以包含逗号/空格组合,因此只需要删除最后一个元素和最后一个元素的最后两个字符。

我已经看过end()函数,但我认为这不会有帮助,因为它只是获取值。

Edit Ok,所以我创建了这个函数/数组,这样我就只有一个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);

如果你正在为查询准备这些值,我建议将没有逗号的所有内容存储在数组中,然后在需要时调用该数组上的内爆,以防止后面的逗号问题

对于基本数组来说,pop和push是最简单的方法。(我知道这不是技术上的问题,但很多人也会来这里寻找简单数组的答案)。

<?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)对于关联数组,如果你不知道最后一个元素的键,你最好先找到最后一个元素的键,然后修改它的值。

$array[end((array_keys($array)))] .= ' additional text';

2)如果你不知道也不关心键,你可以删除最后一个元素并创建一个新的

$array[] = array_pop($array).' additional text';

无论数组如何索引,数组的最后一个元素总是可以使用array_pop()检索到。它还会从数组中删除该元素,如果我们想修改然后再添加它,这是非常有用的,因为你不能在原地修改元素。

你想做的事情可以用一行简单的代码来完成:

$fields[] = preg_replace("/, $/", "", array_pop($fields));

就是这样。下面是它的作用:

  • preg_replace()在字符串中搜索Regex模式,如果找到,用替代字符串替换匹配。

  • 我们搜索的模式是/, $/,意思是:匹配", "(逗号+空格),但仅当它位于字符串的最后($)。

  • 替换字符串只是一个空字符串(""),因此匹配只是从字符串中删除。

  • 我们想要执行替换的字符串是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'
)

注意最后一个逗号是怎么消失的?你自己试试吧

今天偶然发现了这个。我认为最简单的不破坏指针的方法是:

array_splice($array, -1, 1, strtolower(end(array_values($array))).'blah' );

当然,如果你不需要关心指针,你可以删除array_values。但我想知道这是不是一个好方法,因为提取和替换的东西可能比流行或其他东西更苛刻。

PHP 7>= 7.3.0

$array[array_key_last($array)] = 'new value';

演示
$fields = array(
    "firstName = 'Bob', ",
    "lastName = 'Smith', ",
    "email = 'bob@example.com', ",
    "address = '123 anystreet', "
);
$last = $fields[array_key_last($fields)];
$last = preg_replace( "/, $/", "", $last);
$fields[array_key_last($fields)] = $last;

我认为PHP的内爆函数可能是一个很好的选择,而不是自己生成逗号。

否则,您将不得不使用如下内容:

$lastfield = $fields[count($fields)-1];
$lastfield = str_split($lastfield,strlen($lastfield)-2);
$fields[count($fields)-1] = $lastfield;

包括第一行和第三行是为了使第二行更容易阅读,但这很容易合并为一行。