2012-09-20 14 views
7

जब मैं अपनी अनुक्रमणिका के साथ सीधे सरणी तत्व तक पहुंचने का प्रयास कर रहा था तो मुझे उलझन में आया। मुझे लगता है मैं कोडिंग में बेहतर समझा जा सकता है: -मैं सीधे इंडेक्स के साथ सरणी का उपयोग क्यों नहीं कर सकता?

मैं कर्मचारी वर्ग की एक वस्तु हो रहा है और मैं इसे सरणी टाइपकास्ट और इस तरह यह प्रदर्शित करने के लिए करने की कोशिश की:

$arrOfObj = (array) $objEmployee; 

$arrKeys = array_keys($arrOfObj); 

display($arrOfObj); // display() is a method in my library that prints an array in a mannered way. 

यह मेरे निम्नलिखित उत्पादन देता है : -

Array 
(
    [*m_UserId] => 1155 
    [*m_EmailPassword] => 
    [*m_IsAssignedToManagementCompany] => 
    [*m_ManagementCompanyId] => 
    [*m_DepartmentId] => 3 
    [*m_DesignationId] => 4 
    [*m_EmployeeCompletedMonth] => 
    [*m_EmployeeCompletedDay] => 
    [*m_EmailAddress] =>[email protected] 
    ------ 
    ------ 
) 

अब यहां मैं इस स्टार (*) को समझ नहीं पा रहा हूं। जब मेरे सदस्य चर m_UserId, m_EmialPassword और इतने सरल होते हैं कि इस स्टार से यह कहां मिलता है। m_EmailAddress

:

display($arrOfObj['*m_EmailAddress']); 

या

display($arrOfObj['m_EmailAddress']); 

दोनों त्रुटि संदेश अपरिभाषित सूचकांक दे -: और मैं एक त्रुटि हो गया, जब मैं 2 बयान निम्नलिखित के साथ एक ही प्रदर्शित करने का प्रयास और जब मैं इसे करने की कोशिश करता हूं तो यह ठीक काम करता है: -

display($arrOfObj[$arrKeys[8]]); 

अंतिम व्यक्ति ठीक काम करता है, क्या कोई मुझे समस्या बता सकता है।

  display($arrOfObj[$arrKeys[11]]); 
      display($arrOfObj['m_strEmailAddress']); 

उत्तर

14

एक वस्तु एक सरणी में बदल जाती है, तो परिणाम एक सरणी जिसका तत्वों ऑब्जेक्ट के गुणों हो रहा है। चाबियाँ सदस्य परिवर्तनीय नाम हैं, कुछ उल्लेखनीय अपवादों के साथ: पूर्णांक गुण अनुपलब्ध हैं; निजी चर के पास वर्ग नाम वैरिएबल नाम पर प्रीपेड किया गया है; संरक्षित चरों में चर नाम के लिए '*' प्रीपेड किया गया है। इन प्रीपेड मानों में दोनों तरफ शून्य बाइट्स हैं।

http://php.net/manual/en/language.types.array.php#language.types.array.casting

आत्मज्ञान के लिए var_dump(bin2hex($arrKeys[8])) की कोशिश करो। उपरोक्त लिंक किए गए मैनुअल में उदाहरण भी देखें।

+0

फिर मैं स्टार के साथ सरणी संरक्षित कुंजी का उपयोग कैसे कर सकता हूं, और आपने मेरे प्रश्न की अंतिम 3 पंक्तियों का उत्तर नहीं दिया है। – ScoRpion

+2

यदि आपको निकाली गई कुंजी से "असली" कुंजी मान मिलता है, तो आपको स्पष्ट रूप से सही कुंजी मिलती है। स्वयं को सही कुंजी बनाने के लिए, आपको एनयूएल बाइट्स को शामिल करना होगा, जैसे: '"\ 0 * \ 0m_strEmailAddress" '। – deceze

+6

यह '" \ 0 * \ 0str थ्री "' है। डबल उद्धृत तार और एनयूएल बाइट तारांकन के चारों ओर हैं। – deceze

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