2009-11-17 13 views

उत्तर

8

निर्भर करता है कि:

$a1 = array('a' => 1, 'b' => 2, 'c' => 3); 
unset($a1['b']); 
// array('a' => 1, 'c' => 3) 

$a2 = array(1, 2, 3); 
unset($a2[1]); 
// array(0 => 1, 2 => 3) 
// note the missing index 1 

// solution 1 for numeric arrays 
$a3 = array(1, 2, 3); 
array_splice($a3, 1, 1); 
// array(0 => 1, 1 => 3) 
// index is now continous 

// solution 2 for numeric arrays 
$a4 = array(1, 2, 3); 
unset($a4[1]); 
$a4 = array_values($a4); 
// array(0 => 1, 1 => 3) 
// index is now continous 

आम तौर पर unset() hashtables (स्ट्रिंग अनुक्रमित सरणियों) के लिए सुरक्षित है, लेकिन आप सतत सांख्यिक अनुक्रमित का सहारा लेना पड़ यदि आप का उपयोग करना होगा या तो array_splice() या unset() का एक संयोजन और array_values()

+1

array_splice की बजाय array_values ​​के साथ संयुक्त सेट अप का उपयोग क्यों करेंगे? – John

+4

@ जॉन: एक परिदृश्य मैं सोच सकता हूं, जब आप एक सरणी से कई वस्तुओं को हटाना चाहते हैं। 'अनसेट()' के साथ- आप बदलते कुंजियों के बारे में सोचने के बिना मूल्यों को हटा सकते हैं - यदि आप इंडेक्सिंग को सामान्यीकृत करने के लिए 'array_values ​​()' के माध्यम से सरणी चलाते हैं। यह 'array_splice()' कई बार उपयोग करने से साफ़ और तेज है। –

9

आम तरीका:

manual

unset($arr[5]); // This removes the element from the array 

तरह से फ़िल्टर किए गए के अनुसार

:

वहाँ भी है छानने सरणियों की देखभाल करने के array_filter() समारोह

$numeric_data = array_filter($data, "is_numeric"); 

प्राप्त करने के लिए एक अनुक्रमिक सूचकांक आप

$numeric_data = array_values($numeric_data); 

संदर्भ
PHP – Delete selected items from an array

+0

पीटर, धन्यवाद। – lovespring

5

यह निर्भर करता है का उपयोग कर सकते हैं।

$a = array('a','b','c', 'd'); 
array_splice($a, 2, 1); 
var_dump($a); 

आउटपुट:: यदि अनुक्रमणिका में अंतराल पैदा करने के बिना एक तत्व निकालना चाहते हैं, तो आप array_splice उपयोग करने की आवश्यकता

array(3) { 
    [0]=> 
    string(1) "a" 
    [1]=> 
    string(1) "b" 
    [2]=> 
    string(1) "d" 
} 

को सेट किए बिना उपयोग करना काम कर सकते हैं, लेकिन यह एक गैर-लगातार सूचकांक में परिणाम है। यह कभी कभी एक समस्या हो सकती है जब आप गणना (एक $) का उपयोग सरणी पर पुनरावृति - ऊपरी सीमा का एक उपाय के रूप में 1:

$a = array('a','b','c', 'd'); 
unset($a[2]); 
var_dump($a); 

आउटपुट:

array(3) { 
    [0]=> 
    string(1) "a" 
    [1]=> 
    string(1) "b" 
    [3]=> 
    string(1) "d" 
} 

जैसा कि आप देख, गिनती है अब 3 लेकिन अंतिम तत्व की अनुक्रमणिका भी 3.

इसलिए मेरी सिफारिश संख्यात्मक इंडेक्स वाले सरणी के लिए array_splice का उपयोग करने के लिए है, और गैर-संख्यात्मक अनुक्रमणिका के साथ केवल सरणी (शब्दकोश वास्तव में) के लिए अनसेट का उपयोग करें।

+0

वैकल्पिक रूप से आप 'अनसेट ($ a [2]) कॉल कर सकते हैं; $ a = array_values ​​($ a); ' – nickf

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

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