删除最后一个数组值?PHP

24

1 问题类型

$transport = array('foot', 'bike', 'car', 'plane');

我能删除这个平面吗?有什么方法吗?

问题类型为2

 $transport = array('', 'bike', 'car', ''); // delate the last line
 $transport = array('', 'bike', 'car', 'ferrari'); // dont the last line
 $transport = array('ship', 'bike', 'car', 'ferrari'); // dont the last line

有没有一种简单的方法来删除最后一个数组,如果最后一个数组值为空则删除,如果不为空则不删除?但不要删除第一个数组?

5个回答

47
if(empty($transport[count($transport)-1])) {
    unset($transport[count($transport)-1]);
}

1
这个很棒,但是看一下roddik的评论,if ($transport[count($transport)-1] === '') 运行得很好,完美,谢谢。 - Adam Ramadhan
3
很高兴你找到了所需的内容。只是为了让你明白,Roddik的代码将在数组中删除最后一个元素,如果它是空字符串。我的代码将在数组中删除最后一个元素,如果它是false、null或其他被empty()函数视为空的值。可能两者都可以很好地适用于你。 - Scott Saunders
1
@frieder:什么“麻烦”?这个方法除了在数组为空时删除最后一个元素之外,不会对数组做任何操作。array_pop()是一个完全可行的方法,但这个方法并不能防止向数组中添加任何内容。 - Scott Saunders
1
可能是PHP的一个bug。我有一个数组,假设 $array = [[0] => "string1", [1] => "string2"]。然后我用 unset($array[1]) 删除了最后一个元素。现在当我使用 $array[] = "string1" 添加一个元素时,该数组将变成这样:$array = [[0] => "string1", [2] => "string2"] - Friedrich
已经有一个 PHP 函数可以实现这个操作 (array_pop()),用自定义代码移除它并不被视为最佳实践。 - Haddock-san
显示剩余3条评论

33

最简单的方法是使用array_pop()函数,它会将数组末尾的元素弹出。

至于第二个问题:

if (end($transport) == "") { 
    array_pop($transport); 
}

应该处理第二个。

编辑:

修改了代码以符合更新的信息。这应该可以使用基于关联或索引的数组工作。

修复了array_pop,感谢Scott的评论。谢谢你发现了这一点!

修复致命错误,我猜empty不能像我之前那样与end一起使用。上面的代码将不再捕获null / false,如果需要,可以从end函数中分配一个变量并像这样进行测试:

$end_item = end($transport);
if (empty($end_item)) { 
    array_pop($transport); 
}

非常抱歉我发布了错误的代码。上面那个是我测试过的。


1
@Adam Ramadhan,if ($transport[count($transport)-1] === '') - Fluffy
2
使用array_pop更有意义,因为它可以与关联哈希和基于索引的数组一起使用。 - Rob
3
array_pop返回数组的最后一个元素。您的示例代码将使用OP不想要的元素覆盖整个数组。 - Scott Saunders
1
抱歉,已经修复了,但我认为应该将Scott的答案保留为最佳答案。他因发现明显的问题而值得获得此荣誉。 - Jim
@sangam,这不是打字错误。发布的代码按照原始帖子的要求工作。如果数组的末尾是空字符串(“”),则将其从数组中弹出。检查原始问题,您会发现他只想删除数组中的最后一个元素,如果该值为“”。 - Jim
显示剩余9条评论

16

对于问题#1:

$transport=array_slice($transport,0,count($transport)-1)

6
不需要获取数组长度:array_slice($transport, 0, -1) - yckart

13

你可以通过array_pop()函数轻松实现:

array_pop($transport);

2
对于那些更喜欢php.net而不是w3schools.com的人--http://php.net/manual/en/function.array-pop.php - domdambrogia

3
$endvalue = & end($transport);
array_pop($endvalue);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接