extract() and compact() Functions

compact() and extract() Functions: PHP के इन दोनों Functions का प्रयोग करके हम किसी Array के विभिन्न Elements को Variables में Store कर सकते हैं। Variables के नाम Array के Keys से संबंधित होते हैं जबकि Array के Elements की Values Variable की Values बन जाते हैं। यानी यदि निम्नानुसार Array होः

	$name = array(
		'Bali'=>'Rajesh', 
		'Sumerpur'=>'Mahesh', 
		'Rani'=>'Suresh', 
		'Pali'=>'Ganesh'
	);

तो Conversion के बाद निम्नानुसार Keys नाम के Variables बन जाते हैं, जिनमें Array के Elements Values के रूप में Stored होते हैं:

	$Bali = 'Rajesh' ; 
	$Sumerpur = 'Mahesh' ;
	$Rani = 'Suresh' ;
	$Pali = 'Ganesh' ;

extract() Function Array के Elements को Variables में Convert करता है, जबकि compact() Function Variables को Array के Elements में Convert करने का काम करता है।

extract() Function Array के विभिन्न Keys के नाम के Local Variables Create करता है। यदि Key के नाम का कोई Variable पहले से Script में मौजूद हो, तो उस पहले से मौजूद Variable की Value Array द्वारा Create होने वाले Local Variable की Value से Override हो जाती हैं।

इस Function को हम केवल Associative Array के साथ ही उपयोग में ले सकते हैं। Indexed Based Array के साथ इसे उपयोग में नहीं लिया जा सकता, क्योंकि Indexed Based Array में Key के रूप में एक Numerical मान होता है और PHP में किसी Variable के नाम की शुरूआत कभी भी किसी Numerical मान से नहीं हो सकती।

Syntax:
int extract(array &$var_array, int $extract_type = EXTR_OVERWRITE, string $prefix)

इस Function में पहले Argument के रूप में हमें उस Array का नाम Specify करना होता है, जिसके $Key = Value Pair के लिए हम Corresponding Variables Create करना चाहते हैं, जबकि बाकी के सभी Arguments Optional होते हैं।

जब हम किसी Indexed Based Array के साथ इस Function को Use करना चाहते हैं, तब हमें दूसरे Argument के रूप में निम्न में से किसी Constant मान को उपयोग में लेना जरूरी होता है, ताकि Invalid, Numeric Keys अथवा Collisions यानी Key के नाम के समान नाम के Variable के पहले से Script में मौजूद होने की स्थिति को Handle किया जा सके। इस Argument के रूप में हम निम्न में से किसी एक मान को उपयोग में ले सकते हैं:

EXTR_OVERWRITE Value

यदि Collision की स्थिति हो, यानी जिस नाम का Key Array में उपलब्ध है, उसी नाम का कोई Variable पहले से Script में मौजूद हो, तो इस मान को दूसरे Argument के रूप में Specify करने पर पहले से उपलब्ध Variable का मान Array के नए मान से Overwrite हो जाता है।

EXTR_SKIP Value

यदि Collision की स्थिति हो, तो दूसरे Argument के रूप में इस मान को Specify करने पर Script में पहले से उपलब्ध समान नाम के Variable की Value Array के समान Key से Return होने वाली टंसनम से Overwrite नहीं होती है।

EXTR_PREFIX_SAME Value

यदि Collision की स्थिति हो, तो इस Function के तीसरे Argument में Specify की गई String Create होने वाले Variable के नाम से पहले Prefix की तरह Attach हो जाती है, जिससे Create होने वाले नए Local Variable का नाम वही नहीं होता, जो Key का होता है, बल्कि Key के नाम के साथ Prefix के रूप में एक String होती है, जो कि इस Function के तीसरे Argument के रूप में हम Specify करते हैं।

EXTR_PREFIX_ALL Value

यदि Collision की स्थिति हो, तो इस Function के तीसरे Argument में Specify की गई String Create सभी Variable के नाम से पहले Prefix की तरह Attach हो जाती है, जिससे Create होने वाले सभी नए Local Variable का नाम वही नहीं होता, जो Key का होता है, बल्कि Key के नाम के साथ Prefix के रूप में एक String होती है, जो कि इस Function के तीसरे Argument के रूप में हम Specify करते हैं।

EXTR_PREFIX_INVALID Value

जब हम किसी Indexed Based Array के साथ इस Function को Use करते हैं, तब Key के समान नाम का Local Variable Create नहीं हो सकता, क्योंकि PHP में Numeric Value से किसी भी Variable के नाम की शुरूआत नहीं हो सकती।

परिणामस्वरूप इस Function के तीसरे Argument के रूप में हम एक String Specify कर सकते हैं, जो उन सभी Index Numbers के साथ Associate हो जाती है, जो कि Valid Key नहीं होते।

EXTR_IF_EXISTS Value

इस मान को दूसरे Argument के रूप में Specify करने पर Create होने वाला नया Local Variable केवल उसी स्थिति में किसी Variable की Value को Overwrite करता है, यदि PHP Script में उस नाम का Variable पहले से Exist हो।

EXTR_PREFIX_IF_EXISTS Value

इस मान को दूसरे Argument के रूप में Specify करने पर Create होने वाला नया Local Variable केवल उसी स्थिति में Prefix के रूप में तीसरे Argument के रूप में Specified String को Attach करता है, यदि PHP Script में उस नाम का Variable पहले से Exist हो।

EXTR_REFS Value

इस मान को दूसरे Argument के रूप में Specify करने पर Create होने वाला नया Local Variable एक Reference की तरह Create होता है। जिसका मतलब ये होता है कि हालांकि Array के सभी Elements के से Associated Keys के नाम का Variable Create होता है, लेकिन हर Variable, Array के Original Value को ही Reference करता है।

यानी Create होने वाले नए Local Variables में Array की Values Copy नहीं होती, बल्कि उन Values का Reference ही Create होने वाले नए Variables में Store होता है।

हम इस Flag को Boolean OR ( | ) Operator का प्रयोग करके यहां Specify किए गए किसी भी अन्य Flag यानी Constant मान के साथ Use कर सकते हैं।

यहां Specify किए गए किसी भी Constant मान को यदि दूसरे Argument के रूप में Specify न किया जाए, तो Default रूप से PHP EXTR_OVERWRITE मान को दूसरे Argument के रूप में Use कर लेता है।

extract() Function के तीसरे Argument के रूप में हमें एक String Specify करनी होती है, जो उस स्थिति में extract() Function द्वारा उपयोग में ले ली जाती है, जब हम इस Function के दूसरे Argument में EXTR_OVERWRITE के अलावा किसी अन्य मान को Specify करते हैं।

<?php
	$name = array('Rajesh', 'Mahesh', 'Rani'=>'Suresh', 'Pali'=>'Ganesh');
	extract($name, EXTR_PREFIX_ALL, 'nm');
	
	ECHO "Name1 : $nm_0 \n";
	ECHO "Name2 : $nm_1 \n";
	ECHO "Name3 : $nm_Rani \n";
	ECHO "Name4 : $nm_Pali \n";	
?>

//Output
   Name1 : Rajesh
   Name2 : Mahesh
   Name3 : Suresh
   Name4 : Ganesh

उपरोक्त Program में हमने $name Array में पहले दो Elements के साथ कोई Key Associate नहीं की है, इसलिए इनसे Associated Variables के नाम extract() Function के तीसरे Argument में Specified String ‘nm’ के साथ Underscore के बाद Index Number Attach करके प्राप्त हो रहे हैं, जिसे हमने पहले दो ECHO Statements में Specify किया है।

चूंकि extract() Function के दूसरे Argument के रूप में हमने “EXTR_PREFIX_ALL” Constant का प्रयोग किया है, जिसकी वजह से Create होने वाले हर Variable की Key से पहले तीसरे Argument में Specified String “nm” व Underscore के बाद Array की Key Attach हो रही है।

compact() Function, extract() Function का बिल्कुल Reverse काम करता है। इस Function में हम जिन Variables को Argument के रूप में Pass करते हैं, ये Function उन Variables के नाम को Key के रूप में तथा उनकी Values को Array के Element की Values यानी Key से Associated Values के रूप में Use करके एक Array Create करता है और उस Array को Return Value के रूप में Return करता है।

इस Function में हम जितने चाहें उतने Variables को Argument के रूप में Pass कर सकते हैं और Pass किये जाने वाले Variables का Data Type कुछ भी हो सकता है। ये Function उन सभी Arguments को एक Array के रूप में Convert करके Return करता है। इस Function को हम निम्नानुसार उपयोग में ले सकते हैं:

<?php
	$falna = 'Rajesh';
	$bali = 'Mahesh';
	$pali = 'Suresh';
	$jaipur = 'Ganesh';
	$newNames = array('New York', 'Canada');
	
	$cities = compact("falna", "bali", "pali", "jaipur", "newNames");
	
	print_r($cities);	
?>

Array
(
    [falna] => Rajesh
    [bali] => Mahesh
    [pali] => Suresh
    [jaipur] => Ganesh
    [newNames] => Array
        (
            [0] => New York
            [1] => Canada
        )
)

जब हम compact() Function को Use करते हैं, तब हमें इस बात का ध्यान रखना होता है कि इस Function में Pass किए जाने वाले Variables के साथ $ Sign का प्रयोग नहीं किया जाता।

साथ ही हर Variable के नाम को String के रूप में Single Quotes या Double Quotes के बीच Specify किया जाना जरूरी होता है। यदि हम ऐसा नहीं करते हैं, तो ये Function या तो Blank Array Create करता है या फिर Warning Message देते हुए Array Create करता है।

वास्तव में ये Function Argument के रूप में Variables नहीं बल्कि Variable Variables लेता है, जिसके बारे में हम पहले भी पढ चुके हैं। इस तरीके में एक Variable के मान के रूप में Specified String किसी दूसरे Variable का नाम होती है।

उपरोक्त Output देखकर हम आसानी से समझ सकते हैं कि PHP का ये compact Function किस तरह से Argument के रूप में आने वाले मानों को उपयोग में लेते हुए Array Create करके Return करता है।

जब हम इस Function में Arrays को Argument के रूप में Pass करते हैं, तो ये Function एक तरह का Multidimensional Array Create करता है, जैसाकि उपरोक्त Output में भी दिखाई दे रहा है, क्योंकि इस Function के अन्तिम Parameter के रूप में हमने newNames नाम का एक Array Pass किया है। (extract in PHP | compact in PHP)

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

PHP in Hindi | Page: 647 | Format: PDF

BUY NOW GET DEMO REVIEWS