2024年PHP开发者大会日本站

end

(PHP 4, PHP 5, PHP 7, PHP 8)

end将数组的内部指针设置为其最后一个元素

描述

end(数组|对象 &$array): 混合

end()array的内部指针移到最后一个元素,并返回其值。

参数

array

数组。此数组通过引用传递,因为它会被函数修改。这意味着您必须传递一个真实的变量,而不是返回数组的函数,因为只有实际的变量才能通过引用传递。

返回值

返回最后一个元素的值,或者对于空数组返回false

变更日志

版本 描述
8.1.0 对象调用此函数已弃用。请先使用get_mangled_object_vars()对象转换为数组,或者改用实现Iterator接口的类的提供的函数,例如ArrayIterator
7.4.0 SPL类的实例现在被视为没有属性的空对象,而不是调用与该函数同名的Iterator方法。

示例

示例 #1 end() 示例

<?php

$fruits
= array('apple', 'banana', 'cranberry');
echo
end($fruits); // cranberry

?>

参见

  • current() - 返回数组中的当前元素
  • each() - 返回数组中的当前键值对,并前进数组光标
  • prev() - 倒回内部数组指针
  • reset() - 将数组的内部指针设置为其第一个元素
  • next() - 前进数组的内部指针
  • array_key_last() - 获取数组的最后一个键

添加注释

用户贡献注释 11 条注释

franz at develophp dot org
14 年前
有趣的是,当以没有特定顺序的数字键创建数组时,end() 仍然只返回最后创建的值。所以,如果你有这样的代码:

<?php
$a
= array();
$a[1] = 1;
$a[0] = 0;
echo
end($a);
?>

这将输出 "0"。
jasper at jtey dot com
18 年前
此函数返回数组末尾的值,但有时您可能对数组末尾的键感兴趣,尤其是在处理非整数索引数组时。

<?php
// 返回数组末尾的键
function endKey($array){
end($array);
return
key($array);
}
?>

用法示例
<?php
$a
= array("one" => "apple", "two" => "orange", "three" => "pear");
echo
endKey($a); // 将输出 "three"
?>
jorge at REMOVETHIS-2upmedia dot com
12 年前
如果您只需要数组的最后一项而无需影响内部数组指针,只需执行以下操作:

<?php

function endc( $array ) { return end( $array ); }

$items = array( 'one', 'two', 'three' );
$lastItem = endc( $items ); // three
$current = current( $items ); // one
?>

这是有效的,因为函数的参数作为副本发送,而不是对原始变量的引用。
匿名用户
22 年前
如果您需要获取数组中第一个或最后一个元素的引用,请使用这些函数,因为 reset() 和 end() 仅返回您无法直接取消引用的副本。

<?php
function first(&$array) {
if (!
is_array($array)) return &$array;
if (!
count($array)) return null;
reset($array);
return &
$array[key($array)];
}

function
last(&$array) {
if (!
is_array($array)) return &$array;
if (!
count($array)) return null;
end($array);
return &
$array[key($array)];
}
?>
ivijan dot stefan at gmail dot com
10 年前
我发现 end() 函数最适合查找文件名中的扩展名。此函数清除反斜杠并获取文件的扩展名。

<?php
私有函数 extension($str){
$str=implode("",explode("\\",$str));
$str=explode(".",$str);
$str=strtolower(end($str));
return
$str;
}

// 例子:
$file='name-Of_soMe.File.txt';
echo
extension($file); // txt
?>

非常简单。
ken at expitrans dot com
19年前
请注意,从5.0.4版到5.0.5版,此函数现在接受数组作为参数。这可能会破坏某些代码,例如

<?php

echo ">> ".end(array_keys(array('x' => 'y')))."\n";

?>

在5.0.4及更低版本中将返回“致命错误:只能通过引用传递变量”,但在5.0.5中不会。

如果在嵌套函数调用中遇到此问题,则一个简单的解决方法是将`array_keys`(或任何函数)的结果赋给一个中间变量

<?php

$x
= array_keys(array('x' => 'y'));
echo
">> ".end($x)."\n";

?>
Jason
11年前
$filename = 'somefile.jpg';

php 5.4版本不支持以下语句。
echo end(explode(".", $filename)); // 返回jpg字符串

你必须将其分成两条语句
$file = explode(".", $filename);
echo end ($file);
Jacob
7年前
尝试通过`end()`从空数组中获取键的值将返回`NULL`,而不是抛出错误或警告,因为对空数组使用`end()`的结果为`false`。

<?php

$a
= ['a' => ['hello' => 'a1','world' => 'a2'],
'b' => ['hello' => 'b1','world' => 'b2'],
'c' => ['hello' => 'c1','world' => 'c2']
];
$b = [];

var_dump(end($a)['hello']);
var_dump(end($b)['hello']);
var_dump(false['hello']);

?>

结果是

string(2) "c1"
NULL
NULL
Sam Yong - hellclanner at live dot com
15年前
请注意,`end()`不会递归地将你的多维数组的指针设置为末尾。

看看下面的例子
<?php

// 创建用于测试的数组
$a = array();
$i = 0;
while(
$i++ < 3){
$a[] = array(dechex(crc32(mt_rand())),dechex(crc32('lol'.mt_rand())));
}

// 显示数组结构
echo '<pre>';var_dump($a);

// 将$a的指针设置为末尾
end($a);

// 获取$a的当前元素
var_dump(current($a));
// 获取$a的当前元素的当前元素
var_dump(current(current($a)));

?>

你会注意到你可能会得到类似这样的结果

array(3) {
[0]=>
array(2) {
[0]=>
string(8) "764d8d20"
[1]=>
string(8) "85ee186d"
}
[1]=>
array(2) {
[0]=>
string(8) "c8c72466"
[1]=>
string(8) "a0fdccb2"
}
[2]=>
array(2) {
[0]=>
string(8) "3463a31b"
[1]=>
string(8) "589f6b63"
}
}

array(2) {
[0]=>
string(8) "3463a31b"
[1]=>
string(8) "589f6b63"
}

string(8) "3463a31b"

数组元素的指针仍然位于第一个元素,`current` 函数返回第一个元素。所以请注意这一点。
Aleksandr
6年前
<?php
$A
=[1];
print_r($A);
end($A[5]);
print_r($A);
?>

Array
(
[0] => 1
)
Array
(
[0] => 1
[5] =>
)
匿名用户
22 年前
在向数组添加元素时,了解是用哪个键添加的元素可能很有趣。仅仅添加元素并不会改变数组中的当前位置,因此调用`key()`不会返回正确的键值;你必须先将数组定位到`end()`。

<?php
函数 array_add(&$array, $value) {
$array[] = $value; // 添加一个元素
end($array); // 重要!
返回 key($array);
}
?>
To Top