2012-07-17 91 views
0

可能重複:
php explode and array indexPHP:如何訪問由靜態函數返回數組的第一個元素

在PHP 5.3 ...

我有一個動態靜態方法總是返回一個數組。在某些情況下,它將返回只包含一個元素的數組。我想在一個語句中將數組的第一個元素賦值給一個變量。目前,我必須這樣做:

$user = User::findByEmail($_SESSION['email']); 
$user = $user[0]; 
echo $user; 

我想避免的一部分...

$user = $user[0]; 

我希望是這樣工作的:

$user = User::findByEmail($_SESSION['email'])[0]; // not working 

$user = User::findByEmail($_SESSION['email'])->get(0); // not working 

$user = User::findByEmail($_SESSION['email']).get(0); // not working 
+1

你不能避免它,除非你有PHP 5.4。 5.4將允許你做'$ user = User :: findByEmail($ _ SESSION ['email'])[0];' – 2012-07-17 18:29:30

+0

'array_shift(User :: findByEmail($ _ SESSION ['email']))''會抱怨說它沒有獲得數組引用。 – 2012-07-17 18:30:48

+0

兩個get()版本只有在findByEmail返回一個對象的時候纔會起作用。 – 2012-07-17 18:35:06

回答

2

編輯

你想解決的辦法是這樣的:

$user = current(User::findByEmail($_SESSION['email'])); 

注意,使用current()與功能始終返回的第一個元素,因爲數組從未分配給一個變量,沒有一點意義。如果該函數通過引用返回一個數組,則不是這種情況。

+0

是的,這完全符合我的需求,thx :)雖然不是很優雅。 – 2012-07-17 19:27:00

+0

@GuillaumeBois如果你想要優雅的話,可以升級到PHP 5.4 :) – 2012-07-17 19:30:55

+1

這一直困擾着我多年。當使用函數返回的值時'''current'''實際上是從數組中檢索第一個(不是索引[0])元素的唯一合適解決方案。 – 2017-05-22 16:19:37

2

你不能(在PHP 5.4之前)。這是PHP解析器的限制。你最好打賭:

$user = User::findByEmail($_SESSION['email']); 
$user = $user[0];