2012-04-04 7 views
5

मैं किसी सरणी की संपत्ति/मान को कैसे एक्सेस कर सकता हूं जिसे किसी ऑब्जेक्ट में परिवर्तित किया गया है? उदाहरण के लिए, मैं मूल्य सूचकांक 0 में,किसी ऑब्जेक्ट में कनवर्ट किए गए सरणी की संपत्ति/मान को कैसे एक्सेस करें?

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

त्रुटि,

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

मैं $ obj लगता है [0] – MakuraYami

+1

@MakuraYami अगर आप इस की कोशिश की थी, आप देखेंगे कि यह कार्य नहीं करेगा देखना चाहते हैं। '$ obj' एक सरणी नहीं है और आपको उस सीमा पर एक त्रुटि संदेश मिलेगा –

+0

दिलचस्प क्या है कि 'var_dump (get_class_vars ($ obj))' एक खाली सरणी मुद्रित करता है। –

उत्तर

2

कारण आप $obj->0 के माध्यम से मूल्यों तक नहीं पहुंच सकते हैं क्योंकि यह PHP चर नामकरण के विरुद्धदेखता है अधिक जानकारी के लिए। भले ही आप का उपयोग ArrayObject आप अब भी उन्हीं समस्याओं

लेकिन इस के लिए एक पैच है के लिए होता है ... आप स्ट्रिंग के लिए सभी पूर्णांक कुंजी परिवर्तित या अपना स्वयं का रूपांतरण समारोह

लिख सकते हैं उदाहरण

$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 

आउटपुट

string 'qualitypoint' (length=12) 

पूर्ण उत्पादन

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) 

मल्टी सरणी outpur

धन्यवाद

:)

4

कोशिश कर उपयोग करना चाहते इस:

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

var_dump($obj->test); 

परिणाम है:

string(12) "qualitypoint" 

लेकिन $obj->0 तक पहुंचने का प्रयास कर रहा है, वही ई rror से पता चलता है: Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$'

आप पाश वस्तु के माध्यम से, कठिन, आप गुण सामान्य रूप से एक सामान्य सरणी के रूप में उपयोग कर सकते हैं, तो:

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

Apperantly, संपत्ति नियम नामकरण basic variable naming rules जैसे ही हैं।

आप के बजाय एक ArrayObject को परिवर्तित करते हैं, तो आप सूचकांक सामान्य रूप से उपयोग कर सकते हैं:

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

और यह डंपिंग:

var_dump($obj[0]); 

आप मिल जाएगा:

string(12) "qualitypoint" 
+0

उत्तर और संपादन के लिए धन्यवाद। मुझे लगता है कि ऑब्जेक्ट को वापस सरणी में परिवर्तित करना एकमात्र समाधान है ... हाँ मैंने सरणी को जोड़ने की कोशिश की और यह ठीक काम करता है। धन्यवाद। – laukok

+0

याद रखें कि प्रकार कास्टिंग एक महंगा ऑपरेशन है। –

+0

क्षमा करें, 'टाइप कास्टिंग' क्या है? – laukok

संबंधित मुद्दे