26

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

数组如下所示:

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

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

我已经查看了该end()功能,但我认为这不会有帮助,因为它只是获得了价值。

编辑好的,所以我创建了这个函数/数组,这样我就只有一个 mysql 函数来更新用户。有点像检测更改功能,它只传回所需/更改的字段。我没有意识到这种方法存在问题。我认为由于我已经在旧函数中编写了 mysql 查询,因此这种方式应该没有问题。公众无法访问它所在的文件。我将使用对我有用的最佳答案,但我将寻找为什么这是有问题的,我会感谢评论/链接来说明这种方法有什么问题。谢谢。

4

9 回答 9

34

像这样!

end($array);
$key = key($array);
reset($array);
于 2012-12-31T18:40:19.467 回答
14

有一种速记方法可以做到这一点,但如果将其分解成碎片,则更容易理解:

$index = count( $fields ) - 1;
$value = $fields[$index];
$fields[$index] = preg_replace( "/,\ $/", "", $value );
于 2012-12-31T18:40:55.000 回答
6

要更改最后一个数字元素的值:

$lastValue = array_pop($fields);
$fields[] = rtrim(', ',$lastValue);

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

于 2015-11-30T14:07:45.173 回答
6

数组弹出和推送是基本数组最简单的方法。(我知道这在技术上不是问题,但很多人也会来这里寻找与简单数组相关的答案)。

<?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];

?>
于 2016-01-24T10:25:10.527 回答
4

有几种方法:

1)对于关联数组,如果不知道最后一个元素键,最好先找到最后一个元素键,然后改变它的值。

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

2)如果您不知道并且不关心键,您可以剪切最后一个元素并创建一个新元素。

$array[] = array_pop($array).' additional text';
于 2015-12-10T04:47:54.427 回答
1

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'
)

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

于 2020-12-26T16:39:20.717 回答
0

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

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

当然,如果您不必关心指针,您可以删除 array_values。但我想知道这是否是一个好方法,因为拼接的提取-n-替换-东西可能比流行音乐或某事更苛刻?

于 2014-02-16T15:14:08.460 回答
-1

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

除此之外,您将不得不使用类似的东西:

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

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

于 2012-12-31T18:45:37.860 回答
-1

我认为人们正在寻找这个:

@array[-1] =~ s/,$//g;

也适用于换行符:

@array[-1] =~ s/\s$//g;
于 2019-02-19T21:50:11.017 回答