2009-12-23 16 views
6

मैं इस तरह की एक सरणी है (के बाद मैं कुछ तत्वों को अनसेट):एक सरणी सॉर्ट करें और नई संख्यात्मक कुंजी असाइन करें?

$array[3] = 'apple'; 
$array[5] = 'pear'; 
$array[23] = 'banana'; 

जो कार्य करते हैं मैं उन्हें सुलझाने के लिए उपयोग करने के लिए कार्य करें:

$array[0] = 'apple'; 
$array[1] = 'pear'; 
$array[2] = 'banana'; 

मैं प्रकार कार्यों में से कुछ करने की कोशिश की लेकिन यह फ्लॉप काम।

+0

यह '0 = apple',' 1 = banana', '2 = pear' हो नहीं करना चाहिए? :) – BalusC

+0

नहीं, मैं चाबियों से सॉर्ट करना चाहता हूं..लेकिन अगर ऐसा करने का कोई तरीका नहीं है, तो यह भी मानों से क्रमबद्ध करना ठीक है। – ajsie

+0

सभी सामान्य सॉर्टिंग फ़ंक्शंस की तुलना: http://php.net/manual/en/array.sorting.php –

उत्तर

15

मैं आपके इरादे पर 100% निश्चित नहीं हूं। बस मूल्य के आधार पर एक सरणी सॉर्ट करने के लिए, लेकिन नए कुंजी असाइन करते हैं, sort() का उपयोग करें:

sort($array); 
print_r($array); 

कुंजी इस विशेष समारोह के साथ संरक्षित नहीं कर रहे हैं। आउटपुट:

Array 
(
    [0] => apple 
    [1] => banana 
    [2] => pear 
) 

लेकिन आप कुंजी मान उपयोग ksort() द्वारा सरणी सॉर्ट करने के लिए चाहते हैं:

ksort($array); 
print_r($array); 

आउटपुट:

Array 
(
    [3] => apple 
    [5] => pear 
    [23] => banana 
) 

कि कुंजी हालांकि सुरक्षित करेगा। 0 से एक सरणी के लिए कुंजी पुन: असाइन करने के बाद परिणाम पर array_values() का उपयोग करें:

ksort($array); 
$array_with_new_keys = array_values($array); // sorted by original key order 
print_r($array_with_new_keys); 

आउटपुट:

Array 
(
    [0] => apple 
    [1] => pear 
    [2] => banana 
) 
+0

लेकिन यह नई कुंजी – ajsie

+0

ओह असाइन नहीं करता है, वास्तव में यह किया गया =) – ajsie

+1

वह ऑर्डर सेब को सुरक्षित नहीं करेगा , नाशपाती, केला। वह मूल्य से ऑर्डर करना चाहता है, लेकिन चाबियाँ रीसेट करें। – Seb

6

ksort(), कुंजी के आधार पर सॉर्ट होगा तो array_values() साथ मूल्यों को प्राप्त और कहा कि एक नई सरणी पैदा करेगा 0 से n-1 तक कुंजी के साथ।

ksort($array) 
$array = array_values($array); 

बेशक, अगर आपको पहले से ही कुंजी द्वारा क्रमबद्ध किया गया है तो आपको ksort की आवश्यकता नहीं है। आप सरणी_वृत्त() सीधे उपयोग कर सकते हैं।

4
$arrayOne = array('one','two','three'); //You set an array with certain elements 
unset($array[1]);      //You unset one or more elements. 
$arrayTwo = array_values($arrayOnw); //You reindex the array into a new one. 

print_r($arrayTwo);      //Print for prove. 

print_r परिणाम हैं:

Array ([0] => one [1] => three) 
+0

यह एक अच्छा समाधान दो था – ajsie

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