2011-10-25 17 views
49

यहां सौदा यह है कि मेरे पास 17 तत्वों के साथ एक सरणी है। मैं उन तत्वों को प्राप्त करना चाहता हूं जिन्हें मुझे एक निश्चित समय के लिए चाहिए और उन्हें सरणी से स्थायी रूप से हटा दें।एकाधिक सरणी तत्वों को अनसेट करने का बेहतर तरीका

$name = $post['name']; 
$email = $post['email']; 
$address = $post['address']; 
$telephone = $post['telephone']; 
$country = $post['country']; 

unset($post['name']); 
unset($post['email']); 
unset($post['address']); 
unset($post['telephone']); 
unset($post['country']); 

हाँ कोड बदसूरत है, पार्टी की योजना बनाई करने की कोई जरूरत:

कोड यह रहा। मैं इसे कैसे बेहतर बना सकता हूं?

उत्तर

67

ऐसा लगता है कि आप जो करने की कोशिश कर रहे हैं उसके लिए extract() फ़ंक्शन एक बेहतर टूल होगा (माना जाता है कि यह किसी सरणी से सभी कुंजी/मान निकालेगा और उन्हें स्थानीय दायरे में चाबियों के समान नामों के साथ चर)। सामग्रियों को निकालने के बाद, आप पूरे $post को अनसेट कर सकते हैं, मानते हुए कि इसमें कुछ भी शामिल नहीं था जिसमें आप चाहते थे।

हालांकि, वास्तव में आपके सवाल का जवाब देने के लिए, आप कुंजी आप को हटाने और लूप के माध्यम से, स्पष्ट रूप से उन्हें unsetting करना चाहते हैं की एक सरणी बना सकते हैं ...

$removeKeys = array('name', 'email'); 

foreach($removeKeys as $key) { 
    unset($arr[$key]); 
} 

... या आप चर बात कर सकता है एक नई सरणी है कि कुंजी हटा दिया ...

$arr = array_diff_key($arr, array_flip($removeKeys)); 

... या unset() करने वालों के सदस्यों के सभी पारित ... को

unset($arr['name'], $arr['email']); 
+4

[array_diff_key()] (http: // php।नेट/मैनुअल/एन/function.array-diff-key.php) एक अच्छा समाधान है। सोचा था कि मैं जोड़ दूंगा कि आप रिवर्स करने के लिए [array_intersect_key()] (http://php.net/manual/en/function.array-intersect-key.php) का उपयोग कर सकते हैं, केवल कुछ तत्व रखें – batfastad

+1

मैं साथ हूं bbradley - array_diff_key बहुत अच्छा समाधान है – Michael

2

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

$vars = array('name', 'email', 'address', 'phone'); /* needed variables */ 
foreach ($vars as $var) { 
    ${$var} = $_POST[$var]; /* create variable on-the-fly */ 
    unset($_POST[$var]); /* unset variable after use */ 
} 

, आप $ नाम, $ ईमेल, ... कहीं से भी उपयोग कर सकते हैं;)

एनबी: निकालें() सुरक्षित नहीं है, इसलिए यह पूरी तरह से सवाल से बाहर है!

32

एक और तरीका है जो ऊपर दिए गए उदाहरणों के बाद बेहतर है। स्रोत: http://php.net/manual/en/function.unset.php

इसके बजाय पूरी तरह से पाशन पूरे सरणी और उसके सभी चाबियाँ unsetting के

, आप कर सकते हैं बस को सेट किए बिना यह एक बार तो जैसे:

उदाहरण सरणी:

$array = array("key1", "key2", "key3"); 

पूरे सरणी के लिए:

unset($array); 

अद्वितीय कुंजी के लिए:

unset($array["key1"]); 

एक सरणी में एकाधिक कुंजियों के लिए:

unset($array["key1"], $array["key2"], $array["key3"] ....) and so on. 

मुझे आशा है कि यह अपने विकास में मदद करता है।

40

उपयोग array_diff_key

$remove = ['telephone', 'country']; 

array_diff_key($post, array_flip($remove)); 

आप array_intersect_key इस्तेमाल कर सकते हैं अगर आप कुंजी रखने के लिए की एक सरणी की आपूर्ति करना चाहता था दूर करने के लिए।

+3

समझ में नहीं आता कि यह विधि विजेता उत्तर के रूप में क्यों स्वीकार नहीं की जाती है क्योंकि यह वास्तव में एक आकर्षण के रूप में काम करता है !! –

+0

शानदार! अच्छा है। मुझे सरणी पर लूपिंग और तत्वों को परेशान करने के बजाय यह पसंद है। – lifo

+0

स्मार्ट समाधान !! – MAZux

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