2011-02-04 17 views
12

मेरे सरणी:php साहचर्य सरणी कुंजी आदेश (सॉर्ट नहीं)

$data = array('two' => 2, 'one' => 1, 'three' => 3); 

अब, जब मैं सरणी, पहले मान कि ऊपर आ जाएगा पुनरावृति साथ शायद

$data['two'] // = 2 @ index[0] 

सही होगा?

क्या होगा यदि मैं $ डेटा [0] की स्थिति में $ डेटा [1] को स्थानांतरित करना चाहता हूं?

अलग तरीके से व्यक्त करने के लिए:

मैं कैसे सरणी इस तरह दिखेगा कर सकता हूँ (ताकि 'एक' $ पर आ जाती है कि [0] डेटा)

$data = array('one' => 1, 'two' => 2, 'three' => 3 

क्यों मैं इस की ज़रूरत है?

मैं कोड इग्निटर का उपयोग करता हूं, तालिका-> अंतर्निहित फ़ंक्शन उत्पन्न करता है एक assoc सरणी लेता है और एक तालिका बनाता है लेकिन कॉलम व्यवस्थित करने की कोई विधि प्रदान नहीं करता है। यही कारण है कि मैं कॉलम को स्रोत सरणी में ले जाना चाहता हूं।

+0

की [? एक और सरणी के आधार पर कुंजी द्वारा किसी सरणी सॉर्ट] संभावित डुप्लिकेट (http : //stackoverflow.com/questions/348410/sort-an-array-by-keys-based-on-another-array) – iautomation

+0

@iautomation प्रश्न ने किसी का उपयोग करने का कोई उल्लेख नहीं किया पहले के क्रम को नियंत्रित करने के लिए दूसरी सरणी।उन्होंने सरणी बनने के बाद चाबियों के क्रम को नियंत्रित करने के लिए एक समाधान के लिए कहा। एक और सरणी का उपयोग करना एक संभावित समाधान हो सकता है, लेकिन यह इस प्रश्न के समाधान खोजने में सीमित कारक नहीं होना चाहिए। – RedYetiCo

उत्तर

6

PHP के array_splice() फ़ंक्शन पर daniele centamore's comment पर एक नज़र डालें, जहां वह तत्वों को एक सहयोगी सरणी में स्थानांतरित करने के लिए कुछ फ़ंक्शन प्रदान करता है।

+0

इसके आधार पर कुछ लिखें, धन्यवाद – nizzle

+4

यह वास्तव में प्रश्न का उत्तर नहीं देता है। डेनिएल का उदाहरण सहयोगी सरणी – Ben

+1

ksort ($ डेटा) के लिए नहीं है; मेरे साथ काम करता है –

1

PHP 13 functions for sorting arrays है, कुंजी द्वारा, मूल्य द्वारा, उपयोगकर्ता द्वारा परिभाषित कार्यों द्वारा जहां आप निर्दिष्ट कर सकते हैं कि "एक" "दो" से पहले आता है। चीजों को आगे या नीचे सरणी के आगे या आगे बढ़ने के लिए array_shift, array_unshift, array_push और array_pop भी है। आप मौजूदा एक से एक पूरी नई सरणी बना सकते हैं।

+0

मुझे पता है, ये कार्य बहुत अच्छे हैं। हालांकि, ध्यान दें कि यह शीर्षक में 'सॉर्ट सॉर्ट' कहता है। इसके अलावा, मुझे फ़ंक्शन array_move_index ('one', 0) नहीं मिला; – nizzle

+6

वस्तुओं का एक सेट पुन: व्यवस्थित करना * सॉर्टिंग है। सिर्फ इसलिए कि आपका ऑर्डरिंग लेक्सिकोग्राफिक या न्यूमेरिक नहीं है इसका मतलब यह नहीं है कि उस क्रम में सरणी व्यवस्थित करना क्रमबद्ध नहीं है। यह शब्द का बहुत अर्थ है। –

+0

अनजाने में, आपको usort का उपयोग करना चाहिए और एक साधारण बंद करना चाहिए। – loostro

-1

मुझे लगता है, आप asort समारोह का उपयोग करना चाहिए: (array_splice का उपयोग किए बिना)

$data = array('two' => 2, 'one' => 1, 'three' => 3); 

$dataOrdered = $data; 
asort($dataOrdered); 

Run this code

+1

यह कुंजी द्वारा क्रमबद्ध नहीं है, यह मूल्य के अनुसार है! यहां देखें: http://codepad.org/wUAsV5hr – oriadam

+0

प्रश्न विशेष रूप से एक गैर-सॉर्ट समाधान का अनुरोध करता है। – RedYetiCo

10

दो संभव समाधान:

1) के नए आदेश के साथ एक नई सरणी बनाएं चांबियाँ।

$new_keys = array('one', 'two', 'three'); 
$new_data = array(); 
foreach ($new_keys as $key) { 
    $new_data[$key] = $data[$key]; 
} 
$data = $new_data; 

2) तत्व one अग्रिम ले जाएँ, $data से हटाने और सरणी के बाकी कॉपी।

function rearrangeData($data) { 
    $result['one'] = $data['one']; 
    unset($data['one']); 
    return array_merge($result, $data); 
}  
$data = rearrangeData($data); 
1

ksort और uksort देखें।

यहाँ एक काम कर उदाहरण है:

<?php 

$data = array('two' => 2, 'one' => 1, 'three' => 3); 
print_r($data); 
ksort($data); 
print_r($data); 
uksort($data,'cmp'); 
print_r($data); 
function cmp($a, $b) 
{ 
    $num=' one two three four five six seven eight nine ten'; 
    $ai = stripos($num,$a); 
    $bi = stripos($num,$b); 
    if ($ai>0 && $bi>0) { 
     return ($ai > $bi) ? 1 : -1; 
    } 
    return strcasecmp($a, $b); 
} 

आउटपुट:

Array 
(
    [two] => 2 
    [one] => 1 
    [three] => 3 
) 
Array 
(
    [one] => 1 
    [three] => 3 
    [two] => 2 
) 
Array 
(
    [one] => 1 
    [two] => 2 
    [three] => 3 
) 

भागो इस: http://codepad.org/yAK1b1IP

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