PHP unset vs array_pop?

Pac*_*ier 8 php arrays unset

如果我想删除数组的最后一个元素,我可以使用以下两个代码之一:

  1. array_pop($array); (不使用返回值)

  2. unset($array[count($array) -1]);

它们之间是否有任何性能或语义差异?

如果没有,哪个更好?

Ben*_*anc 10

unset如果你需要用删除的值"做"任何东西是不好的(除非你之前已将其分配给其他地方),因为它不会返回任何内容,而array_pop会给你最后一项的东西.

unset您提供的选项可能会略微降低性能,因为您计算数组的长度并对其执行一些数学运算,但我预计差异(如果有的话)可以忽略不计.

正如其他人所说的那样,如果你的数组是数字和连续的,那么上面的情况就是如此,但是如果你的数组不像这样结构,那么东西会变得复杂

例如:

<?php
$pop = $unset = array(
  1 => "a",
  3 => "b",
  0 => "c"
);

array_pop($pop);

// array looks like this:
//  1 => "a", 3 => "b"

$count = count($unset) - 1;
unset($count);
// array looks like this because there is no item with index "2"
//  1 => "a", 3 => "b", 0 => "c"
Run Code Online (Sandbox Code Playgroud)


Osw*_*ald 10

array_pop($array)删除最后一个元素$array.

unset($array[count($array) -1]);删除索引处的元素count($array) -1.该元素不一定是数组的最后一个元素.

考虑$array = array(0 => 'foo', 2 => 'bar', 1 => 'baz').在这种情况下,$array[1]是最后一个元素.代码

foreach (array(0 => "foo", 2 => "bar", 1 => "baz") as $key => $value)
  echo "$key => $value\n";
Run Code Online (Sandbox Code Playgroud)

版画

0 => foo
2 => bar
1 => baz
Run Code Online (Sandbox Code Playgroud)

而且,索引处的元素count($array) -1甚至可能不存在.索引集中可能存在间隙,整数索引可以与字符串索引混合使用.


jh3*_*314 5

返回值不同。 array_pop返回最后一个元素,而unset不会返回任何内容。

对于简单地删除最后一个元素,array_pop会更好,因为您不需要执行count($array)-1,并且它更干净,更具可读性。