PHP Conference Japan 2024

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
private function 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 v5.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']);

?>

結果:

字串(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);
?>

陣列
(
[0] => 1
)
陣列
(
[0] => 1
[5] =>
)
匿名
22 年前
當新增一個元素到陣列時,知道它是以哪個鍵值新增的可能會很有用。僅僅新增一個元素並不會改變陣列中的目前位置,所以呼叫 key() 不會返回正確的鍵值;你必須先將位置設定到陣列的 end()。

<?php
function array_add(&$array, $value) {
$array[] = $value; // 新增一個元素
end($array); // 重要!
return key($array);
}
?>
To Top