2010-11-08 22 views
13

क्या सूचकांक को जानने के बिना एक PHP सरणी से एक स्ट्रिंग (नीचे उदाहरण देखें) को निकालना संभव है?PHP सरणी से स्ट्रिंग निकालें?

उदाहरण:

array = array("string1", "string2", "string3", "string4", "string5"); 

मैं string3 दूर करने के लिए की जरूरत है।

उत्तर

23
$index = array_search('string3',$array); 
if($index !== FALSE){ 
    unset($array[$index]); 
} 

अगर आपको लगता है अपने मूल्य से अधिक एक बार अनुक्रमित के सभी प्राप्त करने के लिए एक खोज मूल्य के साथ array_keys उपयोग करने का प्रयास किया जाएगा। आप शायद यकीन है कि

संपादित करना चाहेंगे:

ध्यान दें, जब unset का उपयोग कर कि अनुक्रमित अपरिवर्तित ही रहेंगे। यदि यह एक मुद्दा है, तो here का एक अच्छा उत्तर है जो दिखाता है कि array_splice का उपयोग करके इसे कैसे किया जाए।

+0

मुझे यह +1 आपके लिए पसंद है। लेकिन, मैं कैसे पुष्टि कर सकता हूं कि इसे हटा दिया गया था (स्क्रीन पर प्रदर्शित)? –

+0

php फ़ंक्शन print_r और var_dump देखें। आप उन्हें अपने सरणी की सामग्री को डंप करने के लिए उपयोग कर सकते हैं। – GWW

+0

ध्यान दें कि अनसेट() का उपयोग करके इंडेक्स को छेड़छाड़ नहीं किया जाएगा: http://stackoverflow.com/a/369761/176140 – schellmax

1

यह इस प्रकार निर्भर करता है कि सरणी कितनी बड़ी हो सकती है, और कई विकल्प हैं।

यदि यह आमतौर पर काफी छोटा है, तो array_diff सबसे तेज़ लगातार समाधान की संभावना है, जैसा कि जॉर्ज ने पोस्ट किया था।

थोड़ा बड़ा सेट के लिए एक अन्य समाधान:

$data = array_flip($data); 
unset($data[$item2remove]); 
$data = array_flip($data); 

लेकिन वह केवल अच्छा है अगर आप डुप्लिकेट आइटम नहीं है। आपके वर्कलोड के आधार पर वस्तुओं की विशिष्टता की गारंटी भी फायदेमंद हो सकती है।

4

आप यह कर सकते हैं।

$arr = array("string1", "string2", "string3", "string4", "string5"); 
$new_arr=array(); 
foreach($arr as $value) 
{ 
    if($value=="string3") 
    { 
     continue; 
    } 
    else 
    { 
     $new_arr[]=$value; 
    }  
} 
print_r($new_arr); 
3

array_search और array_splice का एक संयोजन का उपयोग करें।

function array_remove(&$array, $item){ 
    $index = array_search($item, $array); 
    if($index === false) 
    return false; 
    array_splice($array, $index, 1); 
    return true; 
} 
2

यह शायद सबसे तेजी से विधि नहीं है, लेकिन यह एक लघु कोड और साफ एक पंक्ति है:

$array = array_diff($array, array("string3")) 

या आप PHP> 5.4.0 या उच्चतर उपयोग कर रहे हैं:

$array = array_diff($array, ["string3"]) 
+1

मैंने जीडब्लूडब्ल्यू के खिलाफ विधि को 2.5 लाख बार चलाने के लिए आपको चिह्नित किया है। आपका 18 सेकंड में पूरा हो गया है (17 सेकंड जब मैंने चर का उपयोग नहीं किया), जबकि जीडब्ल्यूडब्ल्यू 16 सेकंड में पूरा हुआ। तो 'array_diff' धीमा है क्योंकि एक स्ट्रिंग के बजाय सरणी के साथ सौदों का कारण बनता है, जिससे ओवरहेड होता है। यदि केवल 'array_diff' जैसे फ़ंक्शन थे लेकिन सरणी में एक स्ट्रिंग को हटाने के लिए। – FluorescentGreen5

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