2010-10-03 21 views
9

Mục tiêu: truy lục phần tử dữ liệu từ bên trong đối tượng PHP theo số.Trả về đối tượng PHP theo số chỉ mục (không phải tên)

Đây là print_r ($ data) của đối tượng:

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

tôi không thể tìm ra cách để kéo một giá trị ra khỏi nó. Đây chỉ là một bản ghi của một đối tượng đa bản ghi phải theo id thay vì tên.

Đây là một số thất bại trong nỗ lực nhằm minh họa những gì mục tiêu là:

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

Trả lời

27

Thông thường, tên biến PHP không thể bắt đầu bằng chữ số. Bạn không thể truy cập $data dưới dạng mảng stdClass không triển khai ArrayAccess - đó chỉ là lớp cơ sở bình thường.

Tuy nhiên, trong trường hợp như thế này, bạn có thể thử truy cập vào thuộc tính đối tượng bằng tên số của nó như sau:

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

Lý do duy nhất tôi có thể nghĩ ra lý do tại sao câu trả lời Spudley của sẽ gây ra lỗi là do bạn chạy PHP 4, không hỗ trợ sử dụng foreach để lặp lại các đối tượng.

+0

CÓ! Cảm ơn bạn. –

+1

Bạn có chắc chắn rằng các công trình? Trên PHP 5.3, nó mang lại 'thuộc tính không xác định: stdClass :: $ 0', đó là những gì mà trải nghiệm của tôi luôn luôn là. – Matthew

+0

@konforce: Tôi cho rằng đề xuất của tôi hoạt động trên PHP 4, đó là những gì tôi cho rằng OP đang chạy vì câu trả lời của Spudley không hoạt động. – BoltClock

3

Bạn đã thử một vòng lặp foreach()? Điều đó sẽ cung cấp cho bạn tất cả các yếu tố có thể truy cập và các khóa mà nó trả về có thể cung cấp cho bạn một đầu mối tốt hơn về cách truy cập trực tiếp các yếu tố đó.

+0

Fatal error: Không thể sử dụng đối tượng của loại stdClass như mảng –

+0

gì phiên bản của PHP bạn đang sử dụng?Kể từ PHP5, bạn sẽ có thể sử dụng 'foreach' trên một đối tượng. (nếu bạn vẫn đang sử dụng PHP4, bạn nên nâng cấp vì nó đã kết thúc trong vòng hai năm) – Spudley

+0

+1 vì điều này có thể đã hoạt động trên các phiên bản PHP được hỗ trợ. Chắc chắn trông giống như một trường hợp PHP 4 ở đây. – BoltClock

0

thử điều này:

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

Theo hướng dẫn, các đối tượng không có nghĩa là sẽ được sử dụng theo cách đó. Các ý kiến ​​on this page làm cung cấp một cách xung quanh nếu đó là một-phải có cho bạn. Bạn cũng có thể đơn giản dựa vào mảng nếu bạn chỉ sử dụng đối tượng cho các thuộc tính (và không phải hành vi).

+0

Fatal error: Không thể sử dụng đối tượng của loại stdClass như mảng trong file.php trên dòng

+0

tôi cập nhật câu trả lời của tôi. Trong ngắn hạn, tôi không nghĩ rằng có thể ra khỏi hộp nhưng nó có thể được thực hiện. – pixeline

7

gợi ý BoltClock để sử dụng "$ data -> { '0'} -> UserName" dường như không còn hoạt động với PHP 5.

tôi đã cùng một vấn đề và tôi thấy rằng hiện tại() sẽ làm việc để có được rằng yếu tố lớp đánh số như thế này ...

echo current($data)->UserName; 

Hoặc nếu điều đó không làm việc (tùy thuộc vào đối tượng), bạn có thể cần phải làm khác hiện tại() gọi như thế này:

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

này làm việc cho PHP5 +

echo $data[0]->UserName; 

hoặc

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

hoặc theo đề nghị của @orrd

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

Tôi nghĩ tại sao câu trả lời này không được kiểm tra màu xanh lá cây –

Các vấn đề liên quan