PHP Sort Array by Key | PHP Sort Array by Value

PHP Sort Array by Key | PHP Sort Array by Value: Sorting किसी भी Programming Language का एक मूल Concept है। बिना Sorting किए हुए किसी Array या Array जैसे किसी भी Data Structure से Data को Access व Manipulate करना काफी Time Consuming काम हो जाता है। परिणामस्वरूप Program की Speed काफी कम हो जाती है। इसलिए हर Data Structure के Data को Sort करना बहुत जरूरी होता है।

PHP हमें किसी Array के विभिन्न Elements को Sort करने के लिए विभिन्न प्रकार के Functions Provide करता है। सामान्यतः Array के सभी Elements English Language के आधार पर Sort होते हैं। लेकिन यदि हम किसी Array में किसी अन्य भाषा में Data Store करते हैं और इस अन्य भाषा में Store Data की Sorting करना चाहते हैं, तो हमें Sorting Operation Perform करने के लिए setlocale() Function को Use करके उस Primary Language को Set करते हैं, जिसमें Data Stored हैं।

PHP मूल रूप से तीन प्रकार के Sorting Functions Provide करता है। PHP द्वारा Sorting के लिए Provide किए गए विभिन्न प्रकार के Sorting Functions निम्नानुसार हैं:

Sorting By Keys
Sorting By Values without Changing the Keys
Sorting By Values and then Changing the Keys

किसी भी तरह की Sorting द्वारा Data या तो Ascending Order में Sort होते हैं, या Descending Order में Sort होते हैं या User जिस Order को Specify करता है, उस User Defined Order में Sort होते हैं। PHP के सभी Sorting Functions को हम निम्नानुसार तीन Groups में Divide कर सकते हैं:

Effect Ascending Descending User-defined order
Sort array by values, then reassign indices starting with 0 sort( ) rsort( ) usort( )
Sort array by values asort( ) arsort( ) uasort( )
Sort array by keys ksort( ) krsort( ) uksort( )

sort(), rsort()usort() Functions Indexed Based Array की Sorting करने के लिए बनाए गए हैं, क्योंकि ये Functions Sorting को एक क्रम में दिखाने के लिए Array के Indexes को नई Numeric Numbering Assign करते हैं।

sort() Function

ये Function किसी Array की Values को Ascending Order में Sort करने का काम करता है। इस Function का Syntax निम्नानुसार होता हैः 

Syntax:
bool sort(array &$array, int $sort_flags = SORT_REGULAR)

इस Function में पहले Argument के रूप में हमें उस Array को Specify करना होता है, जिसे हम Sort करना चाहते हैं। जबकि दूसरे Argument के रूप में हम निम्न में से किसी एक Flag को Specify करके इस Function के Sorting Behavior को Change कर सकते हैं:

SORT_REGULAR Value

ये मान Default मान होता है। जब हम दूसरे Argument में कोई मान Specify नहीं करते, तब PHP इसी मान को Default मान के रूप में Use कर लेता है। ये मान Specify करने पर sort() Function Array के Values की Sorting उनकी ASCII Value के आधार पर करता है।

SORT_NUMERIC Value

जब Array में Stored मानों को Numerical मान के रूप में मानते हुए Sort करना होता है, तब दूसरे Argument के रूप में हमें इस मान को Specify करना होता है। ये मान तब Specify करना चाहिए जब हमारे Array में Numerical Values जैसे कि Integer अथवा Floating Point Values हों।

SORT_STRING Value

जब Array में Stored मानों को String मान के रूप में मानते हुए Sort करना होता है, तब दूसरे Argument के रूप में हमें इस मान को Specify करना होता है। ये मान तब Specify करना चाहिए जब हमारे Array में Alphabetical Values जैसे कि Characters अथवा Strings हों।

SORT_LOCALE_STRING Value

ये मान Specify करने पर sort() Function Current Locale के आधार पर Array के विभिन्न Items को String Format में मानते हुए Sort करता है। setlocale() Function का प्रयोग करके हम किसी अन्य भाषा में Stored Contents वाले Array की भी Sorting कर सकते हैं।

<?php
	$values = array("12a", "23", "b54", "6", "2");

	sort($values, SORT_NUMERIC);
	print_r($values);

	sort($values, SORT_STRING);
	print_r($values);
?>

//Output
Array
(
    [0] => b54
    [1] => 2
    [2] => 6
    [3] => 12a
    [4] => 23
)
Array
(
    [0] => 12a
    [1] => 2
    [2] => 23
    [3] => 6
    [4] => b54
)

उपरोक्त Program में हमने एक ही Array को दूसरे Argument को Set करते हुए दो अलग तरीकों से Sort किया है और दोनों ही प्रकार की Sorting के Result को Output के रूप में देखा जा सकता है।

जब हम दूसरे Argument में SORT_NUMERIC मान Specify करते हैं, तो PHP Array की Sorting करते समय पहले Alphabetical Characters से शुरू होने वाले मानों की Sorting करता है फिर Numerical मानों की। जबकि जब हम दूसरे Argument में SORT_STRING मान Specify करते हैं, तो PHP Array की Sorting करते समय पहले Numerical Values से शुरू होने वाले मानों की Sorting करता है फिर Alphabetical Characters मानों की।

rsort() Function

जब हम Array की Sorting Ascending Order के बजाय Descending Order में करना चाहते हैं, तब हम sort() Function के स्थान पर rsort() Function को Use करते हैं। ये Function ठीक वैसे ही काम करता है, जैसे sort() Function करता है और ठीक sort() Function की तरह ही Arguments भी Accept करता है। अन्तर केवल इनके Return होने वाले Result में होता है।

<?php
	$values = array("12a", "23", "b54", "b52", "b56", "6", "2");

	rsort($values, SORT_NUMERIC);
	print_r($values);

	rsort($values, SORT_STRING);
	print_r($values);
?>

//Output
Array
(
    [0] => 23
    [1] => 12a
    [2] => 6
    [3] => 2
    [4] => b52
    [5] => b54
    [6] => b56
)
Array
(
    [0] => b56
    [1] => b54
    [2] => b52
    [3] => 6
    [4] => 23
    [5] => 2
    [6] => 12a
)

asort() Function

ये Function sort() Function के समान ही होता है और किसी Array को Ascending Order में Sort करता है, लेकिन इस Function को Use करने पर Array का Key=Value Pair Maintain रहता है। इसे समझने के लिए हम एक उदाहरण देखते हैं।

<?php
	$values = array(
		"Rajesh", 	"Mahesh", 	"Suresh", 
		"Ganesh", 	"Prakash", 	"Manohar", 
		"Sohan" );

	sort($values);
	print_r($values);
?>

//Output
Array
(
    [0] => Ganesh
    [1] => Mahesh
    [2] => Manohar
    [3] => Prakash
    [4] => Rajesh
    [5] => Sohan
    [6] => Suresh
)

अब इसी Program को हम asort() Function का प्रयोग करते हुए निम्नानुसार Modify कर सकते हैं:

<?php
	$values = array(
		"Rajesh", 	"Mahesh", 	"Suresh", 
		"Ganesh", 	"Prakash", 	"Manohar", 
		"Sohan" );

	asort($values);
	print_r($values);
?>

//Output
Array
(
    [3] => Ganesh
    [1] => Mahesh
    [5] => Manohar
    [4] => Prakash
    [0] => Rajesh
    [6] => Sohan
    [2] => Suresh
)

दोनों Programs के Output को देखकर sort()asort() दोनों Functions के बीच के अन्तर को आसानी से समझा जा सकता है। sort() Function को Use करने पर Array के Values की Sorting होती है, लेकिन Index Number Maintained रहते हैं। यानी Index Number 0 पर Placed Value Sorting के बाद Index Number 4 पर जा सकता है, जैसाकि पहले उदाहरण Program में हो रहा है।

लेकिन जब हम asort() Function को Use करते हैं, तब ऐसा नहीं होता। यानी Index Number 0 पर Stored Value हमेंशा Index Number 0 के साथ ही Associated रहती है, फिर भले ही Array में इनकी Position क्यों न बदल जाए, जैसा कि उपरोक्त Program के Output में हो रहा है।

asort() Function में भी दूसरे Argument के रूप में हम SORT_LOCALE_STRING, SORT_STRING, SORT_NUMERIC Flags का प्रयोग कर सकते हैं।

arsort() Function

ये Function Exactly asort() Function की तरह ही काम करता है। अन्तर केवल इतना है कि ये Function Array की Values को Ascending Order के बजाय Descending Order में Sort करता है और इस Function के दूसरे Argument के रूप में हम SORT_LOCALE_STRING, SORT_STRING, SORT_NUMERIC Flags का प्रयोग कर सकते हैं। इस Function को पिछले Program में ही Use करके हम निम्नानुसार Modified Program Create कर सकते हैं:

<?php
	$values = array(
		"Rajesh", 	"Mahesh", 	"Suresh", 
		"Ganesh", 	"Prakash", 	"Manohar", 
		"Sohan" );

	arsort($values);
	print_r($values);
?>

//Output
Array
(
    [2] => Suresh
    [6] => Sohan
    [0] => Rajesh
    [4] => Prakash
    [5] => Manohar
    [1] => Mahesh
    [3] => Ganesh
)

ksort() Function

इस Function का प्रयोग करके हम किसी Array के Values को नहीं बल्कि उसकी Keys को Sort कर सकते हैं। यदि Function Successfully किसी Array के Keys को Sort कर लेता है, तो ये Function True Return करता है, अन्यथा False Return करता है।

इस Function के दूसरे Argument के रूप में भी हम SORT_LOCALE_STRING, SORT_STRING, SORT_NUMERIC Flags का प्रयोग कर सकते हैं।

इस Function को पिछले Program में ही Use करके हम निम्नानुसार Modified Program Create कर सकते हैं व Function के Array के Data पर होने वाले Effect को समझ सकते हैं:

<?php
	$values = array(
			"Falna"=>"Rajesh", 	"Bali"=>"Mahesh", 
			"Pali"=>"Suresh", 	"Rani"=>"Ganesh", 
			"Thana"=>"Prakash", 	"Virar"=>"Manohar", 
			"Nala Sopara"=>"Sohan"
		);

	ksort($values);
	print_r($values);
?>

//Output
Array
(
    [Bali] => Mahesh
    [Falna] => Rajesh
    [Nala Sopara] => Sohan
    [Pali] => Suresh
    [Rani] => Ganesh
    [Thana] => Prakash
    [Virar] => Manohar
)

उपरोक्त Program के Output को देखकर ही हम समझ सकते हैं कि ये Function किस तरह से Array के Value को नहीं बल्कि Array की Keys को Sort कर रहा है।

krsort() Function

ये Function Exactly ksort() Function की तरह ही काम करता है। अन्तर केवल इतना है कि ये Function Array की Keys को Ascending Order के बजाय Descending Order में Sort करता है और इस Function के दूसरे Argument के रूप में हम SORT_LOCALE_STRING, SORT_STRING, SORT_NUMERIC Flags का प्रयोग कर सकते हैं। इस Function को पिछले Program में ही Use करके हम निम्नानुसार Modified Program Create कर सकते हैं:

<?php
	$values = array(
			"Falna"=>"Rajesh", 	"Bali"=>"Mahesh", 
			"Pali"=>"Suresh", 	"Rani"=>"Ganesh", 
			"Thana"=>"Prakash", 	"Virar"=>"Manohar", 
			"Nala Sopara"=>"Sohan"
		);

	krsort($values);
	print_r($values);
?>

//Output
Array
(
    [Virar] => Manohar
    [Thana] => Prakash
    [Rani] => Ganesh
    [Pali] => Suresh
    [Nala Sopara] => Sohan
    [Falna] => Rajesh
    [Bali] => Mahesh
)

natsort() Function

ये Function Array के Data को ठीक उसी तरह से Sort करता है, जिस तरह से हम Human Being Sort करते हैं। इसीलिए इस Sorting Function का नाम Natural Sorting के आधार पर natsort() रखा गया है। ये Function Argument के रूप में उस Array को Accept करता है, जिसे Sort करना है, जबकि ये किसी तरह की कोई Value Return नहीं करता। इस Function की Working को समझने के लिए हम एक उदाहरण देखते हैं:

<?php
	$values = array(
			"Picture100.gif", 	"Picture10.gif", 	"Picture15.gif", 
			"Picture01.gif", 	"Picture21.gif", 	"Picture210.gif", 
			"Picture51.gif"
		);

	sort($values);
	print_r($values);
?>

//Output
Array
(
    [0] => Picture01.gif
    [1] => Picture10.gif
    [2] => Picture100.gif
    [3] => Picture15.gif
    [4] => Picture21.gif
    [5] => Picture210.gif
    [6] => Picture51.gif
)

उपरोक्त Program के Output को देखकर हम समझ सकते हैं कि ये Sorting Exactly वैसा ही Result Return नहीं कर रहा है, जैसा सामान्यतः हम Expect करते हैं। अब इसी Program को हम natsort() Function का प्रयोग करते हुए Sort करने के लिए Modified Program बनाते हैं, जो कि निम्नानुसार हैः

<?php
	$values = array(
			"Picture100.gif", 	"Picture10.gif", 	"Picture15.gif", 
			"Picture01.gif", 	"Picture21.gif", 	"Picture210.gif", 
			"Picture51.gif"
		);

	natsort($values);
	print_r($values);
?>

//Output
Array
(
    [3] => Picture01.gif
    [1] => Picture10.gif
    [2] => Picture15.gif
    [4] => Picture21.gif
    [6] => Picture51.gif
    [0] => Picture100.gif
    [5] => Picture210.gif
)

अब हमें प्राप्त होने वाला Output Exactly वैसा ही है, जैसा हम Expect करते हैं। यही अन्तर है natsort() व अन्य प्रकार के sort() Functions में।

natcasesort() Function

ये Function Exactly natsort() Function की तरह ही काम  करता है। अन्तर केवल इतना है कि natsort() Function Case Sensitive है जबकि natcasesort() Function Case Insensitive है। इन्हें समझने के लिए भी हम फिर से पिछले उदाहरण को ही Modify कर रहे हैं:

<?php
	$values = array(
			"Picture100.gif", 	"Picture10.gif", 	"PICTURE15.gif", 
			"Picture01.gif", 	"PICTURE21.gif", 	"Picture210.gif", 
			"Picture51.gif"
		);

	natsort($values);
	print_r($values);
?>

//Output
Array
(
    [2] => PICTURE15.gif
    [4] => PICTURE21.gif
    [3] => Picture01.gif
    [1] => Picture10.gif
    [6] => Picture51.gif
    [0] => Picture100.gif
    [5] => Picture210.gif
)

उपरोक्त Program के Output में हम देख सकते हैं कि हमें फिर से वही Result प्राप्त नहीं हो रहा है, जैसा हम सोंच रहे हैं। क्योंकि natsort() Function Case Sensitive होता है, इसलिए Sorting करने के लिए Array के विभिन्न Elements के बीच Comparision करते समय ये Function Capital Case Letters व Small Case Letters को अलग-अलग मानते हुए Compare करता है।

परिणामस्वरूप हमें उपरोक्त Output प्राप्त होता है। इसी Program में यदि हम natsort() Function के स्थान पर natcasesort() Function को Use करें, तो हमें वही Output प्राप्त हो सकता है, जिसकी हम उम्मीद करते हैं। Modified Program निम्नानुसार हैः

<?php
	$values = array(
			"Picture100.gif", 	"Picture10.gif", 	"PICTURE15.gif", 
			"Picture01.gif", 	"PICTURE21.gif", 	"Picture210.gif", 
			"Picture51.gif"
		);

	natsort($values);
	print_r($values);
?>

//Output
Array
(
    [3] => Picture01.gif
    [1] => Picture10.gif
    [2] => PICTURE15.gif
    [4] => PICTURE21.gif
    [6] => Picture51.gif
    [0] => Picture100.gif
    [5] => Picture210.gif
)

array_multisort() Function

इस Function का प्रयोग करके हम एक ही समय में एक से ज्यादा Indexed Arrays की Sorting कर सकते हैं। इस Function में हमें दो प्रकार के Arguments Pass करने होते हैं।

पहला Argument उस Array का नाम होता है, जिसे हम Sort करना चाहते हैं, जबकि दूसरे Argument के रूप में हमें SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING में से किसी एक मान को Specify करना चाहिए।

ये Function कई Arrays को Argument के रूप में Accept कर सकता है, इसलिये जब हम इस Function को Use करते हैं, तब हमें हर Array के साथ उसके Sorting Flag को भी Specify करना होता है। यानी इस Function का Syntax निम्नानुसार होता हैः

bool array_multisort(&$array1, Flag1, &$array2, Flag2, &$array3, Flag3 …)

हम Comma से Separate करते हुए एक से ज्यादा Flags को भी किसी Array के लिए Specify कर सकते हैं। सामान्यतः SORT_ASC या SORT_DESC के साथ SORT_REGULAR, SORT_NUMERIC, SORT_STRING में से किसी एक को Specify किया जा सकता है।

<?php
	$values = array(
				"Picture100.gif", 
				"Picture10.gif", 
				"PICTURE15.gif", 
				"Picture01.gif" 
			);
	$name = array('Rajesh','Mahesh','Suresh','Ganesh');

	array_multisort($name,SORT_ASC, $values, SORT_DESC, SORT_STRING );
	print_r($values);
	print_r($name);
?>

//Output
Array
(
    [0] => Picture01.gif
    [1] => Picture10.gif
    [2] => Picture100.gif
    [3] => PICTURE15.gif
)
Array
(
    [0] => Ganesh
    [1] => Mahesh
    [2] => Rajesh
    [3] => Suresh
)

ये Function उसी स्थिति में सही तरीके से काम करता है, जब इस Function में Specify किए गए सभी Arrays में Elements की संख्‍या एक समान हो। अन्यथा ये Function सभी Arrays की Sorting नहीं करता और Output में Warning Message Display करता है।

array_reverse() Function

ये Function पहले Argument के रूप में Specify किए गए Array के Elements को Reverse Order में Return करता है। यदि Array में Keys Numeric हों, तो दूसरे Argument के रूप में हम True Specify करके Return होने वाले Resultant Array के Keys को Preserve रख सकते हैं, जबकि Keys के String होने की स्थिति में Array के Result पर किसी तरह का प्रभाव नहीं पडता।

Syntax
      array array_reverse ( array $array, bool $preserve_keys = false)

<?php
	$name = array('Rajesh','Mahesh','Suresh','Ganesh');

	print_r(array_reverse($name));
	print_r(array_reverse($name, true));
?>

//Output
Array
(
    [0] => Ganesh
    [1] => Suresh
    [2] => Mahesh
    [3] => Rajesh
)
Array
(
    [3] => Ganesh
    [2] => Suresh
    [1] => Mahesh
    [0] => Rajesh
)

हमने एक ही Program में एक ही Array को दो तरीकों से Sort किया है। पहले तरीके में array_reverse() Function के दूसरे Argument में हमने कोई मान Specify नहीं किया है, इसलिए Return होने वाले Result में Array के Elements अपने Index Number पर स्थिर नहीं रहते।

जबकि दूसरे तरीके में हमने array_reverse() Function के दूसरे Argument में True Specify किया है। परिणामस्वरूप Output में हम देख सकते हैं कि Reversing होने के बावजूद Array के Elements अपने Index Number के साथ Tightly Bind हैं।

array_flip() Function

ये Function Argument के रूप में एक Array Accept करता है और उस Array के Keys व Values को आपस में Swap करके नया Array Return करता है। यानी इस Function का प्रयोग करने पर Array के सभी Keys, Arrays के Values बन जाते हैं और सभी Values Array के Keys बन जाते हैं।

ध्यान रखने वाली बात ये होती है कि जब हम इस Function को Use करते हैं, तब Array के सभी मान Values Keys होनी चाहिए। यानी Array के सभी Elements की Values का Integer अथवा String Type का होना जरूरी होता है। अन्यथा ये Function उस Key Value Pair को Flip नहीं करता और Output में Warning Message देता है।

यदि Array में एक ही प्रकार की बहुत सारी Values हों, तो Values के Key बनते समय Array के अन्तिम Value के अलावा सभी Values Lost हो जाती हैं, क्योंकि Array में Value, Key की तरह Behave होता है और एक Array में एक नाम या मान का केवल एक ही Key हो सकता है।

<?php
	$name = array('Rajesh','City1'=>'Mahesh','City2'=>'Suresh','Ganesh');
	print_r(array_flip($name));
?>

//Output
Array
(
    [Rajesh] => 0
    [Mahesh] => City1
    [Suresh] => City2
    [Ganesh] => 1
)

जैसाकि Output में हम देख सकते हैं कि Array में जो Elements के Values थे, वे इस Function को Use करने के बाद Keys बन गए हैं और जो मान Array के Keys थे, वे अब Values बन गए हैं। इस Function का यही काम है। यानी ये Function Array की Keys को Values व Values को Keys के रूप में Swap कर देता है।

shuffle() Function

ये Function Argument के रूप में एक Array Accept करता है और Specify किए गए Array के विभिन्न मानों को Random तरीके से Re-Index कर देता है। इसलिए हम कभी भी निश्चित रूप से ये नहीं जान सकते कि कौनसा Element किस Index Number पर Placed है और यदि हम इस Function को Use करने के किसी Array के किसी Element को Access करें, तो हर बार हमें प्राप्त होने वाला Array Element भिन्न हो सकता है।

ये Function Successful होने की स्थिति में True जबकि Fail होने की स्थिति में False Return करता है

<?php
	$name = array('Rajesh','City1'=>'Mahesh','City2'=>'Suresh', 'Ganesh');

	shuffle($name);
	print_r($name);

	shuffle($name);
	print_r($name);

	shuffle($name);
	print_r($name);
?>

//Output
Array
(
    [0] => Ganesh
    [1] => Rajesh
    [2] => Suresh
    [3] => Mahesh
)
Array
(
    [0] => Mahesh
    [1] => Ganesh
    [2] => Suresh
    [3] => Rajesh
)
Array
(
    [0] => Suresh
    [1] => Mahesh
    [2] => Ganesh
    [3] => Rajesh
)

जैसाकि उपरोक्त Output में हम देख सकते हैं कि shuffle() Function Array के Elements की हर बार Re-Indexing कर देता है, इसलिए हम कभी भी ये नहीं जान सकते कि इस Function को Use करने के बाद Array का कौनसा Element किस Index Number पर Place हो जाएगा।

PHP in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook PHP in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

PHP in Hindi | Page: 647 | Format: PDF

BUY NOW GET DEMO REVIEWS