2012-07-09 21 views
21

tôi có:stdClass vào mảng?

stdClass Object 
(
    [0] => stdClass Object 
     (
      [one] => aaa 
      [two] => sss 
     ) 

    [1] => stdClass Object 
     (
      [one] => ddd 
      [two] => fff 
     ) 

    [2] => stdClass Object 
     (
      [one] => ggg 
      [two] => hhh 
     ) 
} 

và tôi phải có được điều này với các phím, ví dụ:

$var = $stdClass[0]; 

nhưng tôi có lỗi:

Fatal error: Cannot use object of type stdClass as array in

phải là có thể phân tích stdClass này để mảng và sử dụng này với các phím?

+0

Tại sao nó một 'stdClass' để bắt đầu với, bạn không thể tạo ra nó như mảng? – deceze

+1

Chắc chắn chỉ cần làm: ** $ arrayRepresentation = (mảng) $ someStdClass; ** –

+0

Có thể trùng lặp của [Chuyển đổi đối tượng stdClass thành mảng trong PHP] (https: // stackoverflow.com/questions/19495068/convert-stdclass-object-to-array-in-php) – mvladk

Trả lời

64

Cast nó vào một mảng:

$array = (array)$stdClass; 
+0

bây giờ tôi có mảng trống –

+0

Dữ liệu đó đến từ đâu để bắt đầu? – deceze

+1

tôi sử dụng hàm json và json_decode. Tôi thêm cho tham số chức năng này đúng, nhưng tôi vẫn có mảng trống –

7

Cast nó

$array = (array) $stdObject; 
+0

nếu bây giờ người dùng $ array [0] sau đó tôi có mảng trống –

+2

này chỉ hoạt động cho mảng hiện tại. Mảng Childrens vẫn là stdObject –

+0

@LucciFangorci Bạn đã không đề cập, rằng bạn muốn toàn bộ cây. Bây giờ tôi thậm chí không thấy một lý do, tại sao: 'echo $ array [0] -> two'. – KingCrunch

3

Cast nó vào một mảng. Hiện tại nó không thể đọc được với PHP như một mảng.

$array = (array)$stdClass; 
+1

làm việc này chỉ cho mảng $ - không cho mảng phụ –

+0

$ mảng [0] [một] sẽ trả lại aaa – maxhud

3

Về cơ bản, chỉ cần gõ cast nó:

$arr = (array)$obj; 
$var = $arr[0]; 

Nhưng đọc hãy cẩn thận here.

+0

bây giờ $ arr là Array, nhưng $ var vẫn là stdObject –

+0

vì bạn đã có đối tượng bên trong đối tượng, bạn ' sẽ cần đưa đối tượng chứa vào một mảng và lặp lại nó. Trong khi duyệt qua nó, truy cập thuộc tính bạn muốn '$ var-> one'. – dnagirl

33

Nếu bạn đang sử dụng json_decode để chuyển đổi chuỗi JSON đó thành đối tượng, bạn có thể sử dụng tham số thứ hai json_decode($string, true) và điều đó sẽ chuyển đối tượng thành mảng liên kết.

Nếu không, những gì người khác đã nói và chỉ cần gõ cast nó

$array = (array) $stdClass;

+0

có, tôi sử dụng json_decode, nhưng điều này không giúp tôi –

+2

Bạn không có vấn đề gì khi sử dụng 'json_decode' là bạn làm:' $ array = json_decode ($ string, true); 'Sau đó sử dụng' print_r' sẽ cung cấp mảng kết hợp với những chiếc chìa khóa. –

+0

nhưng điều này trả lại cho tôi NULL –

-3

stdClass là một đối tượng như vậy u có thể truy cập giá trị từ nó như

echo stdClass->one; 
+7

Thật sao? ....... – Petah

+0

@Petah có nhưng tôi nghĩ anh ấy cũng sẽ phải sử dụng foreach. –

4

Tất nhiên bạn có thể định kiểu , $var = (array) $obj;, nhưng tôi sẽ đề xuất ArrayAccess cho lớp học của bạn.

Bằng cách sử dụng ArrayAccess, sau đó bạn có thể xử lý đối tượng và dữ liệu của mình như thể đó là một mảng hoặc nguyên bản là đối tượng.

7

Vấn đề của bạn có lẽ là giải quyết kể từ khi hỏi, nhưng để tham khảo, nhanh chóng chú-google câu trả lời:

function objectToArray($d) { 
    if(is_object($d)) { 
    $d = get_object_vars($d); 
    } 
    if(is_array($d)) { 
    return array_map(__FUNCTION__, $d); // recursive 
    } else { 
    return $d; 
    } 
} 

Full bài viết here. Lưu ý Tôi không liên kết với tác giả gốc theo bất kỳ cách nào.

1

một này làm việc cho tôi, Các giải mã và mã hóa làm cho một mảng thường xuyên

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

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