ऐरे एलिमेंट को कैसे निकालें और फिर रि-इंडेक्स एरे को कैसे निकालें?


206

मुझे एक सरणी के साथ कुछ परेशानी है। मेरे पास एक सरणी है जिसे मैं नीचे की तरह संशोधित करना चाहता हूं। मैं इसका तत्व (तत्व) सूचकांक द्वारा निकालना चाहता हूं और फिर पुनः अनुक्रमणिका सरणी। क्या यह संभव है?

$foo = array(

    'whatever', // [0]
    'foo', // [1]
    'bar' // [2]

);

$foo2 = array(

    'foo', // [0], before [1]
    'bar' // [1], before [2]

);

जवाबों:


456
unset($foo[0]); // remove item at index 0
$foo2 = array_values($foo); // 'reindex' array

6
यह वही है जो मैं पोस्ट करना चाहता था, +1।
मिकिएल पैटर

4
यह धोखा के समाधान से बेहतर है यदि कई वस्तुओं को एक बार में हटाने की आवश्यकता होती है - यदि उन वस्तुओं के सूचकांक पहले से एकत्र किए जाते हैं। एक बार जब आप पहले आइटम पर array_splice का उपयोग करते हैं, तो आप बाकी वस्तुओं के अनुक्रमित खो देते हैं।
जानिस एल्मेरिस

23
यह ध्यान देने योग्य है कि आप एक भी सेट नहीं कॉल में कई चर / सरणी अनुक्रमित अनसेट कर सकते हैं लायक हो सकता हैunset($foo[0], $foo[3], $bar[1]);
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

बहुत अच्छा समाधान भाई :)
माइकल Kisilenko

मैंने इसका इस्तेमाल किया। धन्यवाद। मैं उपयोग कर रहा था array_splice, और यह 0-वें और 1 सूचकांकों के लिए काम नहीं करता था।
theGreenCabbage


29

आप बेहतर उपयोग करें array_shift()। यह सरणी का पहला तत्व लौटाएगा, इसे सरणी से हटा देगा और सरणी को फिर से अनुक्रमित करेगा। सभी एक कुशल विधि में।


2
यह तब ठीक होता है जब आप पुनः प्राप्त करना चाहते हैं और फिर पहले सरणी तत्व को हटाते हैं, इस प्रक्रिया में सरणी को reindexing करते हैं। array_pop()यदि आपको इसकी आवश्यकता है तो इसका प्रतिपक्ष कार्य अंतिम सरणी तत्व को पुनः प्राप्त और निकाल देगा। लेकिन, एरे के बीच में एक तत्व पर कार्य करने के लिए न तो फ़ंक्शन किया जा सकता है।
डेरिक मिलर

1
जबकि यह orthogonally से संबंधित है, यह सवाल किसी भी तत्व के बारे में स्पष्ट रूप से है , न कि पहले।
फेलिक्स गगनोन-ग्रेनियर


9
Unset($array[0]); 

Sort($array); 

मुझे नहीं पता कि इसे क्यों हटाया जा रहा है, लेकिन अगर किसी ने इसे आज़माने की जहमत उठाई है, तो आप देखेंगे कि यह काम करता है। किसी सरणी पर सॉर्ट का उपयोग करना सरणी की कुंजी को पुन: असाइन करता है। एकमात्र दोष यह है कि यह मूल्यों को क्रमबद्ध करता है। चूंकि चाबियों को स्पष्ट रूप से पुन: असाइन किया जाएगा, यहां तक ​​कि इसके साथ भी array_values, इससे कोई फर्क नहीं पड़ता कि मूल्यों को क्रमबद्ध किया जा रहा है या नहीं।


9
यहां तक ​​कि अगर कुंजी को फिर से असाइन किया जाएगा, तो सही उत्तर में, प्रारंभिक आदेश रखा जाएगा।
s3v3n

1
"मैं सूचकांक द्वारा तत्व (तत्वों) को हटाना चाहता हूं और फिर पुन: सूचकांक सरणी। क्या यह संभव है?" @ s3v3n ओपी ने प्रारंभिक आदेश को बनाए रखने के लिए कभी नहीं कहा। मैंने बस एक समाधान प्रदान किया जो काम करता है और जो कहा गया है वह करता है।
१०:०३ पर ठंढाईदार

1
सवाल 2 साल पुराना है। जाने दो!
s3v3n

@ s3v3n यह कोई शिकायत नहीं है। मैं सिर्फ यह जानना चाहता हूं कि क्यों। जाहिर है कि बाद के जवाबों में सुधार होगा। मैं इस बात से सहमत हूं कि बेहतर तरीके हैं, लेकिन क्या कोई कारण है कि यह उत्तर इतना बुरा है? क्या यह प्रदर्शन है? आदि? एक ही कारण है कि मैं SO पर हूं, सीखने के साथ-साथ सिखाना भी।
frostymarvelous

सामान्य परिस्थितियों में, यह बहुत संभावना है कि प्रोग्रामर को उन मूल्यों की आवश्यकता होगी, जैसा कि इनपुट में है। चलो एक उदाहरण के रूप में डेटाबेस से कुछ पंक्तियाँ लेते हैं जिन्हें एक तालिका में प्रदर्शित किया जाना चाहिए; या चैट एप्लिकेशन जहां उत्तर बिल्कुल उसी क्रम में होना चाहिए। उदाहरणों की संख्या अनंत हो सकती है, बिंदु यह है कि ज्यादातर मामलों में आदेश समान होने की आवश्यकता है या कम से कम प्रोग्रामर सरणी में तत्वों के समान क्रम की अपेक्षा करेगा।
s3v3n


0

इसके अलावा xzyfer के जवाब में

कार्यक्रम

function custom_unset(&$array=array(), $key=0) {
    if(isset($array[$key])){

        // remove item at index
        unset($array[$key]);

        // 'reindex' array
        $array = array_values($array);

        //alternatively
        //$array = array_merge($array); 

    }
    return $array;
}

उपयोग

$my_array=array(
    0=>'test0', 
    1=>'test1', 
    2=>'test2'
);

custom_unset($my_array, 1);

परिणाम

 array(2) {
    [0]=>
    string(5) "test0"
    [1]=>
    string(5) "test2"
  }

0

यदि आप उपयोग करते हैं array_merge, तो यह कुंजियों को बाधित करेगा। मैनुअल बताता है:

सांख्यिक कुंजियों के साथ इनपुट सरणी में मान परिणाम सरणी में शून्य से शुरू होने वाली इंक्रीमेंट कुंजी के साथ बदल दिए जाएंगे।

http://php.net/manual/en/function.array-merge.php

यह वह जगह है जहाँ मुझे मूल उत्तर मिला।

http://board.phpbuilder.com/showthread.php?10299961-Reset-index-on-array-after-unset ()

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.