2011-07-06 38 views
11

मैं एक ऐसा फ़ंक्शन रखना चाहता हूं जो इनपुट के रूप में एक सरणी लेता है और सरणी के कुछ मानों को बदलता है (मेरे मामले में सरणी $ _SESSION है लेकिन मुझे लगता है कि यह वास्तव में maters नहीं है)।मैं PHP में एक फ़ंक्शन कैसे लिख सकता हूं जो सरणी को संशोधित करता है?

मैं यह कैसे कर सकता हूं?


जोड़ा

यह तुच्छ लगता है। लेकिन यह नहीं है। मैं बस कुछ मानों को सरणी में सेट करना चाहता हूं। उदाहरण के लिए, मैं चाहता हूं कि मेरा फ़ंक्शन $ _SESSION ['x'] और $ _SESSION ['y'] को बदल दे। जहां तक ​​मुझे पता है, अगर मैं एक सरणी को तर्क के रूप में पास करता हूं, तो तर्क के किसी भी परिवर्तन मूल सरणी को संशोधित नहीं करेगा। उदाहरण के लिए:

function change_array($x) { 
    $x[0] = 100; 
} 
$x = array(1,2,3); 
change_array($x); 

यह $ x नहीं बदलेगा।


जोड़ा क्यों मेरे सवाल नीचे मतदान कर रहा है? मुझे लगता है कि यह तथ्य इस तथ्य के बावजूद इतना छोटा नहीं है कि यह छोटा है। मुझे यह भी लगता है कि मैंने सभी प्रासंगिक विवरण दिए हैं। जहां तक ​​मुझे एहसास हुआ (एक जवाब के लिए धन्यवाद) यह "संदर्भ पारित करने" के बारे में है। इसके अलावा, तथ्य यह है कि मैं $ _SEESION सरणी को संशोधित करना चाहता हूं, यह थोड़ा अलग है।

+0

कृपया अधिक विशिष्ट हो। सरणी पर प्रदर्शन करने की योजना क्या है? –

+0

आप तर्क के रूप में '$ _SESSION' क्यों पारित करना चाहते हैं: ओ?! यह पहले से ही वैश्विक है !!! –

उत्तर

21

क्या आप अपने कॉल का मतलब: Passing by Reference

अपने बहुत ही सरल

तरह
function changearray(&$arr){ 
    $arr['x'] = 'y'; 
} 

आप इस तरह कॉल कर सकते हैं:

changearray($_SESSION); 
+0

मुझे लगता है कि यह वही है जो पूछ रहा था। कुछ लोग कहते हैं कि $ _SESSION एक "विशेष" सरणी है (क्योंकि यह वैश्विक है)। क्या इसका मतलब यह है कि मुझे इसका अलग-अलग व्यवहार करना चाहिए (उदाहरण के लिए मुझे इसे संदर्भ से पास नहीं करना चाहिए। इसके अलावा, मुझे इसे तर्क के रूप में पास करने की आवश्यकता नहीं है)? – Roman

+1

वे अपने वैश्विक अधिकार रखते हैं और आपको इसे पास करने की आवश्यकता नहीं है, लेकिन मैं आपको सीखना चाहता हूं कि संदर्भ में PHP द्वारा संदर्भित करने के लिए कैसे करें –

+1

बहुत बहुत धन्यवाद! यह अच्छा है कि आप मुझे अपने बहुत ही कम मूल प्रश्न से जो चाहिए उसे प्राप्त कर सकते हैं। धन्यवाद। – Roman

0

कोडिंग की तरह है: -

$_SESSION['index_1'] = 'value 1'; 
$_SESSION['index_2'] = 'value 2'; 

आप सूचकांक "index_2" के लिए मूल्य बदलना चाहते हैं मूल्य के लिए "value 2 changed", तो आप बस लिखना: -

$_SESSION['index_2'] = 'value 2 changed'; 

आशा है कि यह मदद करता है।

+0

जैसा कि मैंने मूल पोस्ट में उल्लेख किया है, मैं एक फ़ंक्शन रखना चाहता हूं क्योंकि एक नया मान उत्पन्न करने के लिए आवश्यक गणनाओं का अनुक्रम बड़ा है (इसलिए, मैं सब कुछ एक फ़ंक्शन में रखना चाहता हूं)। – Roman

-1
function change_array() { 

    global $x; /*this will tell the function to work on the array 'x' out of the function itself.*/ 
    $x[0] = 100; 

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

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