2011-03-06 27 views
7

Làm cách nào để nhận được mảng từ kết quả là json_decode()?Nhận kết quả mảng từ json_decode

Tôi đã có một mảng như thế này:

$array = array(
    'mod_status' => 'yes', 
    'mod_newsnum' => 5 
); 

và tôi lưu này trong cơ sở dữ liệu như JSON mã hóa:

{"mod_status":"yes","mod_newsnum":5} 

Bây giờ tôi muốn để có được mảng một lần nữa từ cơ sở dữ liệu. Nhưng khi tôi sử dụng:

$decode = json_decode($dbresult); 

tôi nhận được:

stdClass Object (
    [mod_status] => yes 
    [mod_newsnum] => 5 
) 

Thay vì một mảng. Làm thế nào tôi có thể nhận được một mảng thay vì một đối tượng?

Trả lời

21

Đặt tham số thứ hai của json_decode true để buộc các mảng kết hợp:

$decode = json_decode($dbresult, true); 
+0

Đó phải là câu trả lời thực sự, hữu ích hơn cho tôi. – Stefan

7

Theo http://in3.php.net/json_decode:

$decode = json_decode($dbresult, TRUE); 
+1

+1 Để sử dụng chữ viết tắt của “đọc ** tốt ** dẫn sử dụng”. ;) – Gumbo

+0

F là chữ “F” freaking: P – Kumar

+0

[Hãy đẹp] (http://stackoverflow.com/faq#benice). –

0

Nếu bạn chỉ sử dụng dữ liệu đó trong PHP Tôi khuyên bạn nên sử dụng serializeunserialize thay hoặc nếu không bạn sẽ không bao giờ có thể phân biệt giữa các đối tượng và các mảng kết hợp, bởi vì các lớp đối tượng thông tin bị mất khi mã hóa thành JSON.

<?php 
class myClass{// this information will be lost when JSON encoding // 
    public function myMethod(){ 
     echo 'Hello there!'; 
    } 
} 
$x = array('a'=>1, 'b'=>2); 
$y = new myClass; 
$y->a = 1; 
$y->b = 2; 
echo json_encode($x), "\n", json_encode($y); // identical 
echo "\n", serialize($x), "\n", serialize($y); // not identical 
?> 

Run it.

+0

Không trả lời câu hỏi: nên bình luận thay thế. –

+1

@Mark Nó đề xuất một giải pháp thay thế có thể tốt hơn. Tôi cũng xem xét các loại câu trả lời đó. trong bản chỉnh sửa mới nhất –

2
$decode = json_decode($dbresult, true); 

Hoặc

$decode = (array)json_decode($dbresult); 
0

Đúc các obje Kết quả ct của json_decode vào một mảng có thể có kết quả không mong muốn (và gây đau đầu). Do đó, bạn nên sử dụng json_decode($json, true) thay vì (array)json_decode($json). Dưới đây là một ví dụ:

hỏng:

<?php 

$json = '{"14":"29","15":"30"}'; 
$data = json_decode($json); 
$data = (array)$data; 

// Array ([14] => 29 [15] => 30) 
print_r($data); 

// Array ([0] => 14 [1] => 15) 
print_r(array_keys($data)); 

// all of these fail 
echo $data["14"]; 
echo $data[14]; 
echo $data['14']; 

// this also fails 
foreach(array_keys($data) as $key) { 
    echo $data[$key]; 
} 

làm việc:

<?php 

$json = '{"14":"29","15":"30"}'; 
$data = json_decode($json, true); 

// Array ([14] => 29 [15] => 30) 
print_r($data); 

// Array ([0] => 14 [1] => 15) 
print_r(array_keys($data)); 

// all of these work 
echo $data["14"]; 
echo $data[14]; 
echo $data['14']; 

// this also works 
foreach(array_keys($data) as $key) { 
    echo $data[$key]; 
} 
Các vấn đề liên quan