2008-12-28 12 views
15

मैं ऐसे प्रोग्राम पर काम कर रहा हूं जो एक बहुआयामी सरणी के साथ PHP के आंतरिक सरणी पॉइंटर्स का उपयोग करता है। मैं वर्तमान पंक्ति से एक तत्व प्राप्त करने की आवश्यकता है, और मैं यह इतना की तरह कर रहा हूँ:फ़ंक्शन के साथ PHP सरणी तत्व एक्सेस करें?

current($arr)['item'] // invalid syntax 

मैं:

$arr[key($arr)]['item'] 

हालांकि, मैं बहुत कुछ इस तरह उपयोग पसंद करते हैं वहाँ उम्मीद कर एक समारोह है कि मैं प्रलेखन कि मुझे इतना की तरह तत्व का उपयोग करने के लिए सक्षम होगा की मेरी स्कैन में नहीं छूटा है:

getvalue(current($arr), 'item') 

या

current($arr)->getvalue('item') 

कोई सुझाव?

+2

आप पहले से ही सबसे अच्छा समाधान पाया है: आप भी इस तरह, एकआयामी सरणियों का उपयोग कर सकते हैं: $ arr [कुंजी ($ arr)] ['item'] –

+0

'getvalue' दृष्टिकोण भी एकल-आयामी सरणी के भी उपयोगी होगा। यह ≤5.3 सिंटैक्स सीमाओं को काम करने की अनुमति देगा और एक सरणी से किसी तत्व को एक्सेस करने की इजाजत देगी, एक फंक्शन कॉल द्वारा सीधे कहें, सीधे एक कथन के भीतर। मुझे ऐसा आंतरिक कार्य याद आ रहा है। – Glutexo

उत्तर

12

मैं बहुत ज्यादा संदेह इस तरह के एक समारोह है, लेकिन यह लिखने के लिए

function getvalue($array, $key) 
{ 
    return $array[$key]; 
} 

संपादित करें तुच्छ है: पीएचपी 5.4 के रूप में, आप समारोह का भाव, current($arr)['item'] से सीधे सूचकांक सरणी तत्व कर सकते हैं।

+3

मुझे लगता है कि शायद यह है कि मैं क्या करूँगा। यदि आप सही हैं कि ऐसा कोई कार्य नहीं है, तो यह एक बहुत खराब निगरानी है। –

1

क्या आपने अभी तक iterator classes में से किसी एक का उपयोग करने का प्रयास किया है? वहां कुछ ऐसा हो सकता है जो आप चाहते हैं कि वास्तव में करता है। यदि नहीं, तो आप ArrayObject क्लास को विस्तारित करके जो चाहते हैं उसे प्राप्त कर सकते हैं।

+0

बस उन पर ध्यान दिया - ऐसा लगता है कि यह सरणी के माध्यम से पुन: प्रयास करने के लिए केवल एक ऑब्जेक्ट उन्मुख तरीका है।ArrayIterator :: वर्तमान वर्तमान आइटम देता है, वैसे ही वर्तमान() फ़ंक्शन करता है, जो वास्तव में मेरी समस्या नहीं है। –

-1

यदि यह काम नहीं करता है, तो आपकी बहुआयामी सरणी कैसे बनाई गई है? एक var_dump() मदद कर सकता है।

$subkey = 'B'; 
$arr = array(
    $subkey => array(
     'AB' => 'A1', 
     'AC' => 'A2' 
    ) 
); 


echo current($arr[$subkey]); 
next($arr[$subkey]); 
echo current($arr[$subkey]); 
+0

मैं जो प्रदर्शन कर रहा हूं वह वास्तव में केवल प्राथमिक सरणी के साथ है। मैंने कहा "बहुआयामी" क्योंकि मुख्य सरणी के संबंधित तत्व स्वयं सरणी हैं, लेकिन मैं उन पर पुन: प्रयास नहीं करना चाहता हूं - मैं बस उन्हें आसानी से एक्सेस करना चाहता हूं। –

+0

एक सरणी के रूप में $ arr [$ subkey] का इलाज करने के बारे में, या $ new_arr = array_values ​​($ arr [$ subkey])? फुटनोट: आपके अनुरोधित वर्तमान ($ arr) ['item'] और वर्तमान ($ arr ['item']) के बीच क्या अंतर है? – chelmertz

-1

मैं अक्सर

foreach ($arr as $key=>$val) { 
    $val['item'] /*$val is the value of the array*/ 
    $key   /*$key is the key used */ 
} 
बजाय

अगले ($ आगमन)/वर्तमान ($ आगमन) का उपयोग

+0

मैं इसका भी उपयोग करता हूं - प्रश्न के लिए मैंने इस तथ्य को समाप्त कर दिया कि मैं वास्तव में मतभेदों की तलाश में दो क्रमबद्ध सरणी नीचे जा रहा हूं, और मुझे पूरा यकीन है कि foreach उस तरह की पहुंच का समर्थन नहीं करता है, लेकिन मैं हो सकता है गलत। वैसे भी, आपके उत्तर के लिए धन्यवाद। :) –

0

यह समारोह एक सा lenghty हो सकता है, लेकिन मैं यह सब का उपयोग समय, विशेष रूप से दृश्यमान में:

if (array_key_exists('user', $_SESSION) === true) 
{ 
    if (array_key_exists('level', $_SESSION['user']) === true) 
    { 
     $value = $_SESSION['user']['level']; 
    } 

    else 
    { 
     $value = 'DEFAULT VALUE IF NOT EXISTS'; 
    } 
} 

else 
{ 
    $value = 'DEFAULT VALUE IF NOT EXISTS'; 
} 

इस में बदल जाता है:

Value($_SESSION, array('user', 'level'), 'DEFAULT VALUE IF NOT EXISTS'); 

यहाँ समारोह है:

function Value($array, $key = 0, $default = false) 
{ 
    if (is_array($array) === true) 
    { 
     if (is_array($key) === true) 
     { 
      foreach ($key as $value) 
      { 
       if (array_key_exists($value, $array) === true) 
       { 
        $array = $array[$value]; 
       } 

       else 
       { 
        return $default; 
       } 
      } 

      return $array; 
     } 

     else if (array_key_exists($key, $array) === true) 
     { 
      return $array[$key]; 
     } 
    } 

    return $default; 
} 

पुनश्च:

Value($_SERVER, 'REQUEST_METHOD', 'DEFAULT VALUE IF NOT EXISTS'); 
संबंधित मुद्दे