2012-04-04 10 views
5

Làm cách nào để truy cập thuộc tính/giá trị của một mảng đã được chuyển đổi thành một đối tượng? Ví dụ, tôi muốn truy cập các giá trị trong các chỉ số 0,Làm cách nào để truy cập thuộc tính/giá trị của một mảng đã được chuyển đổi thành một đối tượng?

$obj = (object) array('qualitypoint', 'technologies', 'India'); 
var_dump($obj->0); 

lỗi,

Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$' in C:...converting_to_object.php on line 11

+0

Tôi nghĩ $ obj [0] – MakuraYami

+1

@MakuraYami nếu bạn đã cố gắng này, bạn sẽ thấy rằng nó sẽ không hoạt động. '$ obj' không phải là mảng và bạn sẽ nhận được thông báo lỗi đến mức đó –

+0

Điều thú vị là' var_dump (get_class_vars ($ obj)) 'in một mảng trống. –

Trả lời

2

Các lý do bạn không thể truy cập các giá trị thông qua $obj->0 của nó vì nó chống lại việc đặt tên biến PHP, xem http://php.net/manual/en/language.variables.basics.php để biết thêm thông tin. thậm chí nếu bạn sử dụng ArrayObject bạn vẫn sẽ có những vấn đề tương tự

nhưng có một miếng vá này ... bạn có thể chuyển đổi tất cả các phím số nguyên để chuỗi hoặc viết chức năng chuyển đổi của riêng bạn

Ví dụ

$array = array('qualitypoint', 'technologies', 'India' , array("hello","world")); 
$obj = (object) $array; 
$obj2 = arrayObject($array); 
function arrayObject($array) 
{ 
    $object = new stdClass(); 
    foreach($array as $key => $value) 
    { 
     $key = (string) $key ; 
     $object->$key = is_array($value) ? arrayObject($value) : $value ; 
    } 
    return $object ; 
} 
var_dump($obj2->{0}); // Sample Output 
var_dump($obj,$obj2); // Full Output to see the difference 


$sumObject = $obj2->{3} ; /// Get Sub Object 
var_dump($sumObject->{1}); // Output world 

Output

string 'qualitypoint' (length=12) 

Full đầu ra

object(stdClass)[1] 
    string 'qualitypoint' (length=12) 
    string 'technologies' (length=12) 
    string 'India' (length=5) 

    array 
     0 => string 'hello' (length=5) 
     1 => string 'world' (length=5) 

object(stdClass)[2] 
    public '0' => string 'qualitypoint' (length=12) 
    public '1' => string 'technologies' (length=12) 
    public '2' => string 'India' (length=5) 
    public '3' => 
    object(stdClass)[3] 
     public '0' => string 'hello' (length=5) 
     public '1' => string 'world' (length=5) 

nhiều mảng outpur

Cảm ơn

:)

4

Cố gắng này:

$obj = (object) array('test' => 'qualitypoint', 'technologies', 'India'); 

var_dump($obj->test); 

Kết quả là:

string(12) "qualitypoint" 

Nhưng cố gắng truy cập $obj->0, cùng một e rror xuất hiện: Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$'

Nếu bạn lặp qua các đối tượng, khó khăn, bạn có thể truy cập vào các thuộc tính bình thường như một mảng thông thường:

foreach($obj as $x) { 
    var_dump($x); 
} 

Apperantly, tài sản đặt tên quy tắc cũng giống như các basic variable naming rules.

Nếu bạn chuyển nó sang một ArrayObject thay vào đó, bạn có thể truy cập vào các chỉ số bình thường:

$obj = new ArrayObject(array('qualitypoint', 'technologies', 'India')); 

Và bán phá giá nó:

var_dump($obj[0]); 

Bạn sẽ nhận được:

string(12) "qualitypoint" 
+0

cảm ơn câu trả lời và chỉnh sửa. Tôi nghĩ rằng giải pháp duy nhất là để chuyển đổi các đối tượng trở lại một mảng ... có tôi đã cố gắng để liên kết mảng và nó hoạt động tốt. cảm ơn. – laukok

+0

Hãy nhớ rằng loại truyền là một hoạt động tốn kém. –

+0

xin lỗi, 'đúc kiểu' là gì? – laukok