2010-10-03 53 views
9

目標:按數字從PHP對象內檢索數據元素。按索引號(不是名稱)返回PHP對象

這是對象的print_r($數據):

stdClass Object 
(
    [0] => stdClass Object 
     (
      [TheKey] => 1456 
      [ThingName] => Malibu 
      [ThingID] => 7037 
      [MemberOf] => California 
      [ListID] => 7035 
      [UserID] => 157 
      [UserName] => John Doe 
     ) 
) 

我無法弄清楚如何拉值出來。這只是一個多記錄對象的記錄,應該由id而不是名稱。

這些都是一些失敗的嘗試,說明目標是什麼:

echo $data -> 0 -> UserName; 
echo $data[0] -> UserName; 

回答

27

通常,PHP變量名稱不能以數字開頭。作爲一個數組,你不能訪問$data,因爲stdClass沒有實現ArrayAccess - 這只是一個普通的基類。

然而,在這樣的情況下,你可以嘗試通過其數字名稱訪問對象的屬性,像這樣:

echo $data->{'0'}->UserName; 

我能想到的,爲什麼Spudley的答案會導致錯誤的唯一原因是因爲你運行PHP 4,不支持使用foreach來迭代對象。

+0

是的!謝謝。 – 2010-10-03 20:50:16

+1

你確定這有效嗎?在PHP 5.3上,它產生'未定義的屬性:stdClass :: $ 0',這是我的經驗一直。 – Matthew 2010-10-03 21:00:21

+0

@konforce:我認爲我的建議適用於PHP 4,這將是我認爲OP正在運行,因爲Spudley的答案不起作用。 – BoltClock 2010-10-03 21:02:32

3

您已經嘗試了foreach()循環?這應該爲您提供所有可訪問的元素,並且它返回的密鑰可以讓您更好地瞭解如何直接訪問它們。

+0

致命錯誤:你使用的是什麼版本的PHP不能使用類型爲stdClass的對象爲數組 – 2010-10-03 20:48:07

+0

?從PHP5開始,你應該可以在對象上使用'foreach'。 (如果你還在使用PHP4,你應該升級,因爲它的使用壽命已經超過兩年) – Spudley 2010-10-03 20:52:16

+0

+1,因爲這樣可以支持PHP版本。絕對看起來像這裏的PHP 4案例。 – BoltClock 2010-10-03 20:54:58

0

試試這個:

echo $data[0]['UserName']; 

根據手冊,對象並不意味着使用這種方式。如果這對你來說是必須的,那麼評論on this page確實提供了一種解決方法。如果你只是使用對象的屬性(而不是行爲),你也可以簡單地依賴數組。

+0

致命錯誤:不能聯機
2010-10-03 20:44:52

+0

我更新了我的答案file.php使用類型爲stdClass的對象爲數組。總之,我不認爲這是可能的,但它可以實施。 – pixeline 2010-10-03 20:52:26

7

BoltClock的建議,用「$數據 - > {0} - >用戶名」顯然不再與PHP 5

工作我有同樣的問題,我發現,目前()將努力獲得該編號類元素這樣的...

echo current($data)->UserName; 

或者,如果不工作(根據不同的對象),你可能需要做的另一電流()調用是這樣的:

echo current(current($data))->UserName; 
4

這適用於PHP5 +

echo $data[0]->UserName; 

foreach ($data as $data){ 
    echo $data->UserName; 
    } 

或由@orrd建議

current($data)->UserName works great too. 
+0

我想爲什麼這個答案沒有得到綠色檢查 – 2016-10-12 07:18:27