2011-06-16 14 views
19

मैं एक PHP लूप के साथ काम कर रहा हूं, और मेरे पास एक सवाल था कि कैसे एसेट कुंजी सरणी को प्रभावित करता है। यह सरणी PHP, 0, 1, 2, 3 etc... द्वारा असाइन की गई मानक संख्यात्मक कुंजी का उपयोग करती है। जब भी unset() किसी सरणी मान पर चलता है, तो क्या सरणी कुंजियां घुमाए जाते हैं या क्या वे पहले के रूप में बनाए जाते हैं?अन्य इंडेक्स पर PHP अनसेट एरे मूल्य प्रभाव

आपके समय के लिए धन्यवाद।

+10

यह ऐसा कुछ है जिसे आप अपने आप को बहुत ही कोशिश कर सकते थे ... –

+1

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

+1

@SweetChillyPhilly यह पहली बार नहीं है कि एसओ ने दस्तावेज़ीकरण/मामूली उदाहरणों की जगह ली है। खुशी हुई यह मदद की। –

उत्तर

39

चाबियाँ नहीं बदली जाती हैं या पुनर्निर्मित नहीं होती हैं। unset() कुंजी को हटा दिया जाता है और अन्य रहते हैं।

$a = array(1,2,3,4,5); 
unset($a[2]); 
print_r($a); 

Array 
(
    [0] => 1 
    [1] => 2 
    [3] => 4 
    [4] => 5 
) 
+0

मुझे माइकल की ज़रूरत है, धन्यवाद! –

+0

@Michael हम 'un' (' – Rafee

+1

@Rafee के साथ केवल एकल के साथ' 4' जैसे सरणी से विशिष्ट मानों को हटा सकते हैं क्या आप एक से अधिक अनसेट()' के साथ एकाधिक मानों को निकालना चाहते हैं? यदि ऐसा है, तो आप उन मूल्यों के बिना 'array_diff() 'का उपयोग कर सकते हैं, जिन्हें आप चाहते थे। –

2

वे हैं के रूप में वे थे। वह एक कुंजी है जिसे

+0

ग्रेट, उत्पत्ति। धन्यवाद! –

4

स्वयं परीक्षण करें, लेकिन यहां आउटपुट है।

php -r '$a=array("a","b","c"); print_r($a); unset($a[1]); print_r($a);' 
Array 
(
    [0] => a 
    [1] => b 
    [2] => c 
) 
Array 
(
    [0] => a 
    [2] => c 
) 
2

कुंजी गायब हो जाती है, चाहे वह संख्यात्मक हो या नहीं। नीचे टेस्ट स्क्रिप्ट आज़माएं।

<?php 
    $t = array('a', 'b', 'c', 'd'); 
    foreach($t as $k => $v) 
     echo($k . ": " . $v . "<br/>"); 
    // Output: 0: a, 1: b, 2: c, 3: d 

    unset($t[1]); 

    foreach($t as $k => $v) 
     echo($k . ": " . $v . "<br/>"); 
    // Output: 0: a, 2: c, 3: d 
?> 
1

यह हो सकता है संदर्भ से बाहर लेकिन unsetting मूल्यों में एक वैश्विक सरणी से एक छोटा सा, ऊपर, लेकिन वैश्विक मूल्य आप global $variable_name साथ घोषित करने के बजाय $GLOBALS के साथ उपयोग में माइकल Berkowski द्वारा जवाब लागू होते हैं। तो यह हो जाएगा कुछ की तरह:

unset($GLOBALS['variable_name']['array_key']);

बजाय:

global $variable_name; unset($variable_name['array_key']);

नायब: यह केवल काम करता है अगर आप वैश्विक चर का उपयोग कर रहे हैं।

0

कुंजियां अनुपलब्ध हटा कुंजी के साथ रखा जाता है, लेकिन वे ऐसा करने से पुनर्व्यवस्थित किया जा सकता:

$array = array(1,2,3,4,5); 
unset($array[2]); 
$arranged = array_values($array); 
print_r($arranged); 

आउटपुट:

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 4 
    [3] => 5 
) 

सूचना है कि अगर हम करते हैं उलटफेर के बिना निम्नलिखित:

unset($array[2]); 
$array[]=3; 

मान 3 की अनुक्रमणिका 5 होगी क्योंकि इसे सरणी के अंत तक धक्का दिया जाएगा और लापता सूचकांक की जांच या प्रतिस्थापित करने की कोशिश नहीं करेगा। इंडेक्स एक्सेस के साथ फॉर लूप का उपयोग करते समय याद रखना महत्वपूर्ण है।

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