मैं दिए गए मूल्य के साथ सरणी आइटम हटाने की जरूरत द्वारा सरणी आइटम निकाला जा रहा?मूल्य
मूल्य
उत्तर
यह एक सरल एक लाइनर के साथ पूरा किया जा सकता है।
$arr = array('nice_item', 'remove_me', 'another_liked_item', 'remove_me_also');
आप कर सकते हैं::
$arr = array_diff($arr, array('remove_me', 'remove_me_also'));
और $arr
का मान होगा:
array('nice_item', 'another_liked_item')
आशा है कि यह सुंदर कोड लिखने में मदद करता है
इस सरणी होने।
केवल तभी जब आप चर का नियंत्रण करते हैं। यदि आप इसे संदर्भ के रूप में प्राप्त करते हैं तो यह विधि अनुपयोगी है। – srcspider
नहीं, यह * संदर्भित सरणी के साथ काम करता है, 'array_diff' फ़ंक्शन गैर-विनाशकारी है, यह एक नई सरणी देता है। –
यदि आप संदर्भ के द्वारा एक सरणी प्राप्त करते हैं और इससे किसी आइटम को हटाना चाहते हैं, तो आप मेरे बिंदु को याद करते हैं, आप इस विधि से नहीं कर सके। – srcspider
w/ओ फ्लिप का प्रयास करें:
<?php
foreach ($items as $key => $value) {
if ($id === $value) {
unset($items[$key]);
}
}
सबसे शक्तिशाली समाधान array_filter
का उपयोग करेंगे, जो आप अपने खुद के छानने समारोह को परिभाषित करने की अनुमति देता है।
लेकिन कुछ यह थोड़ा overkill है, अपनी स्थिति में कह सकते हैं ...
एक साधारण foreach
पाश सरणी गर्त जाने के लिए और आइटम आप पर्याप्त होना चाहिए नहीं करना चाहती दूर करने के लिए।
foreach ($items as $key => $value) {
if ($value == $id) {
unset($items[$key]);
// If you know you only have one line to remove, you can decomment the next line, to stop looping
//break;
}
}
कैसे के बारे में:
if (($key = array_search($id, $items)) !== false) unset($items[$key]);
या के लिए अनेक मान:
इस तरह, आपके मामले में, शायद चाल करना चाहिए
while(($key = array_search($id, $items)) !== false) {
unset($items[$key]);
}
यह रोका जा सके मुख्य हानि भी, जो array_flip()
का दुष्प्रभाव है। अगर आप अपने सरणी में अद्वितीय मान हैं
देखें
आपका समाधान ही काम करते हैं:
<?php
$trans = array("a" => 1, "b" => 1, "c" => 2);
$trans = array_flip($trans);
print_r($trans);
?>
एक बेहतर तरीका array_search साथ सेट नहीं हो सकता है, आवश्यक है, तो एक पाश में।
आप सही हैं, लेकिन इस विशेष मामले में मुझे पूरा यकीन है कि मूल्य अद्वितीय हैं :) – Marek
मैं दूसरा जवाब जोड़ रहा हूं। मैंने यहां विभिन्न तरीकों का प्रयास करने के लिए त्वरित बेंचमार्किंग स्क्रिप्ट लिखी है।
$arr = array(0 => 123456);
for($i = 1; $i < 500000; $i++) {
$arr[$i] = rand(0,PHP_INT_MAX);
}
shuffle($arr);
$arr2 = $arr;
$arr3 = $arr;
/**
* Method 1 - array_search()
*/
$start = microtime(true);
while(($key = array_search(123456,$arr)) !== false) {
unset($arr[$key]);
}
echo count($arr). ' left, in '.(microtime(true) - $start).' seconds<BR>';
/**
* Method 2 - basic loop
*/
$start = microtime(true);
foreach($arr2 as $k => $v) {
if ($v == 123456) {
unset($arr2[$k]);
}
}
echo count($arr2). 'left, in '.(microtime(true) - $start).' seconds<BR>';
/**
* Method 3 - array_keys() with search parameter
*/
$start = microtime(true);
$keys = array_keys($arr3,123456);
foreach($keys as $k) {
unset($arr3[$k]);
}
echo count($arr3). 'left, in '.(microtime(true) - $start).' seconds<BR>';
तीसरी विधि, array_keys()
वैकल्पिक खोज पैरामीटर निर्दिष्ट के साथ, अब तक का सबसे अच्छा तरीका से हो रहा है। आउटपुट उदाहरण:
499999 left, in 0.090957164764404 seconds
499999left, in 0.43156313896179 seconds
499999left, in 0.028877019882202 seconds
इस से परखने के बाद, समाधान मैं तो प्रयोग करेंगे होगा:
$keysToRemove = array_keys($items,$id);
foreach($keysToRemove as $k) {
unset($items[$k]);
}
प्रभावशाली - धन्यवाद :) – Marek
मुझे लगता है कि array_search array_diff विधि का उपयोग करने से कहीं अधिक पठनीय कोड है। उपरोक्त – kendepelchin
@ ज़ोंबैट मुझे आश्चर्य है कि आदेश के परिणामों के साथ कुछ भी करने के लिए है। यह संभव है कि शफल उस मूल्य को डाल दें जिसे हम आगे या अंत के करीब खोज रहे हैं। इसके अलावा ... +1 –
से $arr
unset($arr[array_search($rm_val, $arr)]);
function deleteValyeFromArray($array,$value)
{
foreach($array as $key=>$val)
{
if($val == $value)
{
unset($array[$key]);
}
}
return $array;
}
$rm_val
दूर करने के लिए आपको इस कार्रवाई रेफरी के लिए array_splice फ़ंक्शन का उपयोग कर सकते हैं: array_splice
array_splice($array, array_search(58, $array), 1);
की
- 1. आंतरिक मूल्य शून्य मूल्य
- 2. मूल्य
- 3. मूल्य
- 4. मूल्य
- 5. मूल्य
- 6. मूल्य
- 7. मूल्य
- 8. मूल्य
- 9. मूल्य
- 10. मूल्य
- 11. मूल्य
- 12. मूल्य
- 13. मूल्य
- 14. मूल्य
- 15. मूल्य
- 16. मूल्य
- 17. मूल्य
- 18. मूल्य
- 19. मूल्य
- 20. मूल्य
- 21. मूल्य
- 22. सी #: प्रारूप मूल्य मूल्य स्ट्रिंग
- 23. अपरिभाषित चर, मूल्य == बनाम! मूल्य
- 24. जावास्क्रिप्ट सॉर्ट कुंजी मूल्य जोड़ी ऑब्जेक्ट मूल्य
- 25. PHP वापसी (मूल्य); बनाम वापसी मूल्य;
- 26. अधिकतम मूल्य?
- 27. अधिकतम मूल्य
- 28. चुनिंदा मूल्य
- 29. अपने मूल्य
- 30. निर्धारित मूल्य
संभावित डुप्लिकेट [पीएचपी सरणी मान से हटाना (कुंजी नहीं)] (http://stackoverflow.com/questions/7225070/php-array-delete-by-value-not-key) – Ben