2009-09-23 12 views
6

मैं फ़ंक्शन कॉल में स्वतंत्र तर्क के रूप में सरणी में मानों का उपयोग करना चाहता हूं। उदाहरण:सरणी को स्वतंत्र फ़ंक्शन तर्कों में बदलें - कैसे करें?

// Values "a" and "b" 
$arr = array("alpha", "beta"); 
// ... are to be inserted as $a and $b. 
my_func($a, $b) 
function my_func($a,$b=NULL) { echo "{$a} - {$b}"; } 

सरणी में मानों की संख्या अज्ञात है।

संभावित समाधान:

  1. मैं एक ही तर्क के रूप में सरणी पारित कर सकते हैं - लेकिन के रूप में कई, स्वतंत्र समारोह तर्क पारित करने के लिए पसंद करेंगे।

  2. implode() सरणी से अलग स्ट्रिंग में सरणी। (विफल क्योंकि यह सिर्फ एक स्ट्रिंग है।)

  3. एक एकल पैरामीटर का उपयोग करना:

    $str = "'a','b'"; 
    function goat($str); // $str needs to be parsed as two independent values/variables. 
    
  4. उपयोग eval()?

  5. सरणी को पार करें?

सुझावों की सराहना की जाती है। धन्यवाद।

+0

- क्या वे कम से कम फ़ंक्शन हस्ताक्षर की तर्क सूची से मेल खाने के लिए जाने जाते हैं? – grantwparks

उत्तर

12

यह सवाल काफी पुराना है लेकिन PHP में 5.6+ इस के लिए अंत में और अधिक प्रत्यक्ष समर्थन नहीं है: "। सरणी में मानों की संख्या अज्ञात है"

http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list.new

$arr = array("alpha", "beta"); 
my_func(...$arr); 
1

कोशिश सूची()

// Values "a" and "b" 
$arr = array("alpha", "beta"); 
list($a, $b) = $arr; 
my_func($a, $b); 

function my_func($a,$b=NULL) { echo "{$a} - {$b}"; } 
+0

नहीं * तकनीकी रूप से * सही (call_user_func_array यह है कि आपको इस प्रकार के व्यवहार को कैसे करना है, लेकिन यह बहुत चालाक है। +1 – cwallenpoole

+0

अच्छा सुझाव। फिर आप एक मानक फ़ंक्शन कॉल (call_user_func_array के बिना) का उपयोग कर सकते हैं जो कोड को साफ रखता है। एकमात्र पतन यह है कि सूची में आपको तर्कों को कड़ी-कोड करने की आवश्यकता है ... सूची ($ ए, $ बी) ... जबकि मैं पहले से ही सरणी मानों की संख्या नहीं करता हूं। –

+0

मैं 'सूची() के बारे में सोच रहा था 'जब मैं इस सवाल को देख रहा था, लेकिन यह असीमित मात्रा में पैरामीटर की अनुमति नहीं देता है, है ना? –

17

अगर मैं तुम्हें सही ढंग से समझ:

$arr = array("alpha", "beta"); 
call_user_func_array('my_func', $arr); 
+0

बिल्कुल। धन्यवाद। –

0

आपको लगता है कि call_user_func_array() उपयोग कर सकते हैं। यह आश्चर्यजनक काम करता है (और PHP 5.3 के बाद भी लैम्ब्डा कार्यों के साथ)।

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