2012-03-07 38 views
24

Tôi đang cố gắng lấy thuộc tính từ dữ liệu JSON được giải mã thành đối tượng PHP. Nó chỉ là một yêu cầu API dữ liệu YouTube trả về một đối tượng video có một đối tượng nội dung thích;Nhận thuộc tính đối tượng PHP là số

[content] => stdClass Object 
       (
        [5] => https://www.youtube.com/v/r4ihwfQipfo?version=3&f=videos&app=youtube_gdata 
        [1] => rtsp://v4.cache7.c.youtube.com/CiILENy73wIaGQn6pSL0waGIrxMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp 
        [6] => rtsp://v6.cache3.c.youtube.com/CiILENy73wIaGQn6pSL0waGIrxMYESARFEgGUgZ2aWRlb3MM/0/0/0/video.3gp 
       ) 

Làm

$object->content->5 

Ném "T_DNUMBER bất ngờ" - mà làm cho cảm giác hoàn hảo. Nhưng làm cách nào để tôi nhận được giá trị của một thuộc tính là một số?

Tôi chắc rằng tôi nên biết điều này. Cảm ơn trước.

+3

Chắc chắn một trong những sắc thái khó chịu hơn về PHP. –

+1

Bản sao có thể có của [Cách truy cập các thuộc tính đối tượng có tên như số nguyên?] (Http://stackoverflow.com/questions/10333016/how-to-access-object-properties-with-names-like-integers) – nawfal

+0

[Điều này giải thích nó một cách hoàn hảo] (https://stackoverflow.com/q/10333016/6521116) –

Trả lời

47

này nên làm việc:

$object->content->{'5'}

+1

Đó là do'er. Cảm ơn! –

+5

Không hoạt động. Bắt được một thuộc tính 'Undefined: stdClass :: $ 5'. Sử dụng phiên bản PHP 5.5.7 – Geo

+5

Luồng công việc này KHÔNG LÀM VIỆC nếu biến là một mảng đã được truyền tới một đối tượng. Một lời giải thích chi tiết và ví dụ có thể được tìm thấy ở đây: http://stackoverflow.com/a/10333200/58795 –

17

Một khả năng khác là sử dụng các tham số thứ 2 để json_decode:

$obj = json_decode(str, true); 

Bạn nhận được một mảng thay vì một đối tượng PHP, mà bạn có thể sau đó chỉ số như thường lệ:

$obj['content'][5] 
+1

Điều đó sẽ làm việc là tốt, cảm ơn. –

+0

IMHO sạch hơn nhiều, nhờ gợi ý =) – Can

2

Một aproach là cas ting đối tượng vào mảng.

$array = (array) $object; 
$array['content'][5]; 
+1

Điều này không chính xác. Bạn đã chỉ đưa đối tượng '$ object' vào một mảng. Thuộc tính '$ content' vẫn là một đối tượng. Bạn cũng cần phải thêm điều này: '$ array ['content'] = (array) $ array ['content'];'. Đó là lý do giải pháp mã hóa/giải mã JSON đơn giản hơn. Nó cũng chuyển đổi tất cả các đối tượng trẻ em. –

+0

Đúng, chỉ hoạt động với các mảng một chiều –

1

Mã hóa JSON, sau đó giải mã đối tượng của bạn chuyển thành true làm tham số thứ hai trong hàm giải mã. Điều này sẽ trả về một mảng kết hợp.

$array = json_decode(json_encode($object), true); 

Bây giờ bạn có thể sử dụng mảng mới của bạn

echo $array['content']['5']; 

Sử dụng $object->content->{'5'} sẽ không việc nếu đối tượng đã được tạo ra bằng cách đúc một mảng đến một đối tượng.

Mô tả chi tiết hơn có thể được tìm thấy ở đây: https://stackoverflow.com/a/10333200/58795

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