खोज…


SplFixedArray

PHP सरणी से अंतर

PHP का डिफ़ॉल्ट एरे प्रकार वास्तव में ऑर्डर किए गए हैश मैप्स के रूप में लागू किया गया है, जो हमें एरे बनाने के लिए अनुमति देता है जिसमें कुंजी / मूल्य जोड़े शामिल होते हैं जहां मान किसी भी प्रकार के हो सकते हैं और चाबियाँ या तो संख्या या तार हो सकती हैं। यह परंपरागत रूप से नहीं है कि कैसे सरणियाँ बनाई जाती हैं, हालांकि।

पारंपरिक PHP सरणी चित्र 1

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

$arr = [
    9     => "foo",
    1     => 4.2,
    "bar" => null,
];

foreach($arr as $key => $value) {
    echo "$key => $value\n";
}

तो उपरोक्त कोड हमें वही देगा जो हम उम्मीद करेंगे।

9 => foo
1 => 4.2
bar => 

नियमित PHP सरणियाँ भी गतिशील रूप से हमारे लिए आकार हैं। वे बढ़ने और सिकुड़ने लगते हैं, जैसे हम सरणी से और स्वचालित रूप से पॉप मानों को धक्का देते हैं।


हालांकि, एक पारंपरिक सरणी में आकार तय होता है और इसमें पूरी तरह से एक ही प्रकार का मूल्य होता है। इसके अलावा, कुंजियों के बजाय प्रत्येक मूल्य इसके सूचकांक तक पहुंच है, जिसे सरणी में इसकी ऑफसेट द्वारा घटाया जा सकता है।

SplFixedArray चित्रा 2

चूँकि हम किसी दिए गए प्रकार के आकार को जानते हैं और सरणी का निश्चित आकार एक ऑफसेट है तो type size * n n सरणी में मान की स्थिति को दर्शाता है। इसलिए $arr[0] ऊपर के उदाहरण में, हमें 1 देता है, सरणी में पहला तत्व और $arr[1] हमें 2 देता है, और इसी तरह।

SplFixedArray, हालांकि, मूल्यों के प्रकार को प्रतिबंधित नहीं करता है। यह केवल संख्या प्रकारों के लिए कुंजी को प्रतिबंधित करता है। यह भी एक निश्चित आकार का है।

यह SplFixedArrays को एक विशेष तरीके से सामान्य PHP सरणियों की तुलना में अधिक कुशल बनाता है। वे अधिक कॉम्पैक्ट हैं इसलिए उन्हें कम मेमोरी की आवश्यकता होती है।

सरणी को त्वरित करना

SplFixedArray को एक ऑब्जेक्ट के रूप में लागू किया जाता है, लेकिन इसे उसी परिचित सिंटैक्स के साथ एक्सेस किया जा सकता है जिसे आप ArrayAccess इंटरफ़ेस लागू करने के बाद सामान्य PHP सरणी तक पहुँचते हैं। वे Countable और Iterator इंटरफेस को भी लागू करते हैं, इसलिए वे उसी तरह व्यवहार करते हैं जैसे आप PHP में व्यवहार करने वाले सरणियों के लिए उपयोग किया जाता है (जैसे कि count($arr) और foreach($arr as $k => $v) उसी तरह से काम करते हैं SplFixedArray के रूप में वे PHP में सामान्य सरणियों करते हैं।

SplFixedArray कंस्ट्रक्टर एक तर्क लेता है, जो कि सरणी का आकार है।

$arr = new SplFixedArray(4);

$arr[0] = "foo";
$arr[1] = "bar";
$arr[2] = "baz";

foreach($arr as $key => $value) {
    echo "$key => $value\n";
}

इससे आपको वह मिलेगा जो आप उम्मीद करेंगे।

0 => foo
1 => bar
2 => baz
3 => 

यह भी उम्मीद के मुताबिक काम करता है।

var_dump(count($arr));

हमें देता है...

int(4)

SplFixedArray में सूचना, सामान्य PHP सरणी के विपरीत, कुंजी हमारे सरणी में तत्व के क्रम को दर्शाती है, क्योंकि यह एक सच्चा सूचकांक है और न कि केवल एक मानचित्र है

सरणी का आकार बदलना

बस ध्यान रखें कि क्योंकि सरणी एक निश्चित आकार की है, गणना हमेशा समान मान लौटाएगी। अतः unset($arr[1]) परिणामस्वरूप $arr[1] === null , count($arr) अभी भी 4 बनी हुई है।

तो सरणी को आकार देने के लिए आपको setSize विधि पर कॉल करना होगा।

$arr->setSize(3);

var_dump(count($arr));

foreach($arr as $key => $value) {
    echo "$key => $value\n";
}

अब हम प्राप्त करते हैं ...

int(3)
0 => foo
1 => 
2 => baz

SplFixedArray से आयात करें और SplFixedArray से निर्यात करें

तुम भी आयात / के साथ एक SplFixedArray के में और बाहर एक सामान्य पीएचपी सरणी निर्यात कर सकते हैं fromArray और toArray तरीकों।

$array      = [1,2,3,4,5];
$fixedArray = SplFixedArray::fromArray($array);

foreach($fixedArray as $value) {
    echo $value, "\n";
}
1
2
3
4
5

दूसरे रास्ते से जा रहे हैं।

$fixedArray = new SplFixedArray(5);

$fixedArray[0] = 1;
$fixedArray[1] = 2;
$fixedArray[2] = 3;
$fixedArray[3] = 4;
$fixedArray[4] = 5;

$array = $fixedArray->toArray();

foreach($array as $value) {
    echo $value, "\n";
}
1
2
3
4
5


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow