// first
$value = reset($arr);
$key = key($arr);
(以该顺序)
See reset()
PHP Manual http://php.net/manual/en/function.reset.php,
key()
PHP Manual http://www.php.net/manual/en/function.key.php.
unset($arr[$key]); # in case you want to remove it.
However array_pop()
PHP Manual http://php.net/manual/en/function.array-pop.php is working with the last element:
// last
$value = end($arr);
$key = key($arr);
unset($arr[$key]); # in case you want to remove it.
See end()
PHP Manual http://www.php.net/manual/en/function.end.php.
为了好玩:
[$value, $key] = [reset($arr), key($arr)]; // first
[$value, $key] = [end($arr), key($arr)]; // last
(PHP 7.1+)
or
list($value, $key) = array(reset($arr), key($arr)); // first
list($value, $key) = array(end($arr), key($arr)); // last
(PHP 4.3+)
or
extract(array('value' => reset($arr), 'key' => key($arr))); // first
extract(array('value' => end($arr), 'key' => key($arr))); // last
(PHP 4.3+;警告:提炼() https://php.net/extract正在使用!)
or
// first
reset($arr);
list($key, $value) = each($arr);
// last
end($arr);
list($key, $value) = each($arr);
(注意:each() 函数自 PHP 7.2.0 起已弃用,自 PHP 8.0.0 起已消失)
或者任何你喜欢的游戏风格;)
处理空数组
到目前为止还缺少处理空数组的功能。因此需要检查是否存在最后一个(第一个)元素,如果没有,则设置$key
to null
(as null
不能是数组键):
// first
for ($key = null, $value = null; false !== $_ = reset($arr);)
{
$value = $_;
unset($arr[$key = key($arr)]);
break;
}
unset($_);
// last
for ($key = null, $value = null; false !== $_ = end($arr);)
{
$value = $_;
unset($arr[$key = key($arr)]);
break;
}
unset($_);
这将给出一个填充数组,例如$arr = array('first' => '1st', 'last' => '2nd.');
:
string(4) "2nd." # value
string(4) "last" # key
array(1) { # leftover array
["first"]=>
string(3) "1st"
}
和一个空数组:
bool(false) # value
NULL # key
array(0) { # leftover array
}
害怕使用 unset?
如果你不信任unset()
具有您需要的性能(我认为这并不是一个真正的问题,尽管我没有运行任何指标),您可以使用本机array_pop()
实施以及(但我真的认为unset()
作为语言构造可能会更快):
// first
reset($arr);
$key = key($arr);
$value = array_pop($arr);
// last
end($arr);
$key = key($arr);
$value = array_pop($arr);