2010-09-27 13 views
8

मुझे लगता है कि मैं सही ढंग से समझ नहीं सकता कि array_splice को कैसे काम करना चाहिए। मेरी समझ यह है कि पहला पैराम आपकी प्रारंभिक सरणी है, दूसरा पैरामेट शुरू करने वाला तत्व है, और तीसरा पैरा लंबाई, या प्रतिस्थापित करने के लिए तत्वों की संख्या है। , मैं नहीं करना चाहताphp में array_splice का उपयोग करके मैं एक सरणी सदस्य को कैसे हटा सकता हूं?

Array ( 
[0] => Array ([TypeFlag] => S [qty] => 1 [denom] => 25 [certMessage] => [totalPrice] => 25) 
[1] => Array ([TypeFlag] => C [qty] => 2 [denom] => 25 [certMessage] => [totalPrice] => 50) 
[2] => Array ([TypeFlag] => V [qty] => 2 [denom] => 25 [certMessage] => test [totalPrice] => 50)) 

मैं पूरी तरह से दूसरा तत्व (TypeFlag = सी आदि 1 के सूचकांक के साथ सरणी) को निकालना चाहते:

तो, मैं (print_r उत्पादन) इस सरणी है इसे किसी भी चीज़ से बदलें; बस शेष दो तत्वों के साथ सरणी वापस करने के लिए। मैं इस की कोशिश की है (जहां गाड़ी सरणी नाम है):

$cart = array_splice($cart, 1,1); 

लेकिन क्या मैं के साथ अंत यह जब एक print_r कर रही है:

Array ([0] => Array ([TypeFlag] => C [qty] => 2 [denom] => 25 [certMessage] => [totalPrice] => 50)) 

तो ऐसा लगता है 0 और 2 को हटाने जा करने के लिए , और शेष के रूप में 1 छोड़कर। मैं क्या गलत कर रहा हूं?

उत्तर

14

array_splice से मिलकर एक सरणी देता है अधिलेखित करने के लिए बताए रहे हैं निकाले गए तत्व

आप क्या कर रहे हैं:

$cart = array_splice($cart, 1,1); 

तो तुम 2 तत्व (सूचकांक 1) निकालने कर रहे हैं और परिणाम वापस $cart को बताए जाते हैं, अपने मूल सरणी अधिलेखित।

दूसरे तत्व को पूरी तरह से निकालने के लिए array_splice के वापसी मूल्य को $cart पर वापस असाइन न करें। तो बस कार्य करें:

array_splice($cart, 1,1); 

यह काम करता है क्योंकि सरणी समारोह के संदर्भ द्वारा पारित है।

इसके अलावा, आप सरणी से एक भी तत्व को निकालना चाहते हैं इसकी अधिक कुशल और क्लीनर unset के रूप में उपयोग करने के लिए:

unset($cart[1]); 
+1

तो अगर मैं कर रहा हूँ इसे एक फ़ंक्शन के अंदर कर रहा है और चयनित मूल्य से सरणी को वापस करने की आवश्यकता है, क्या मुझे पहले अस्थायी मान (यानी अस्थायी मान) को सौदा करने की आवश्यकता है $ cartTemp = $ कार्ट), फिर splice करें, फिर सरणी को $ कार्ट में पुन: असाइन करें? या मैं सिर्फ array_splice ($ कार्ट, 1, 1) करता हूं, फिर $ कार्ट वापस कर देता हूं? कभी भी मन नहीं - बस कोशिश की और यह काम करता है अगर मैं सिर्फ array_splice करता हूं और फिर $ कार्ट वापस करता हूं। धन्यवाद। – EmmyS

+1

नहीं। इसे एक अस्थायी रूप से असाइन करने की आवश्यकता नहीं है। बस फंक्शन को कॉल करें, इसे सरणी पास कर दें और फ़ंक्शन सरणी को बदल देगा। – codaddict

+0

अनसेट को अनुक्रमित सरणी की आवश्यकता होती है, यदि सरणी में कोई इंडेक्स अनसेट नहीं है तो उन्हें स्वयं जोड़ता है और यदि आप इंडेक्स के बिना अपना संग्रह चाहते हैं तो यह सबकुछ खराब हो जाता है .. – CookieMonster

5

array_splice रिटर्न "निकाली/प्रतिस्थापित" तत्व है, जो आप तो सही ढंग से spliced ​​$ गाड़ी

$discard = array_splice($cart, 1,1); 

या बस

array_splice($cart, 1,1); 
2

बस अनसेट():

का उपयोग करें
3

अनसेट() का उपयोग करने वाला एकमात्र मुद्दा यह है कि यह अनुक्रमणिका को अद्यतन नहीं करता है।

यानी।

$arr = array('one', 'two', 'three', 'four'); 
print_r($arr); 

सरणी ( [0] => एक [1] => दो [2] => तीन [3] => चार )

unset($arr[2]); 

print_r($arr); 

सरणी ( [0] => एक [1] => दो [3] => चार )

जबकि array_splice जाएगा फिर से सूचकांक सरणी

$arr = array('one', 'two', 'three', 'four'); 
array_splice($arr,2,1); 
print_r($arr); 

सरणी ( [0] => एक [1] => दो [2] => चार )

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

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