संख्यात्मक और साहचर्य सूचकांक कुंजी के बीच कोई संबंध नहीं है।
जब आप कहते हैं कि आप कुंजी / मान के सरणी इंडेक्स का उपयोग करके एक साहचर्य सरणी का मान सेट करना चाहते हैं , तो आपको दी गई कुंजी का उपयोग करना होगा, सेटिंग सेटिंग $array[1]के समान नहीं है $array['foo']।
इस सरणी पर विचार करें
print_r( array('foo', 'foo' => 'bar', 'baz', 'some' => 'value') );
यह देगा
Array
(
[0] => foo
[foo] => bar
[1] => baz
[some] => value
)
व्यूह सरणी में दूसरा तत्व है। यह ऑफसेट है , लेकिन इसका इंडेक्स 1 से कोई लेना-देना नहीं है। जैसा कि आप देख सकते हैं कि ऊपर दिए गए एरे में, इंडेक्स 1 के साथ जुड़ा हुआ है baz। यह मानना गलत है कि सिर्फ इसलिए fooकि पहली साहचर्य कुंजी है जिसका वास्तविक संख्यात्मक कुंजी के साथ कुछ भी करना है। ठीक उसी तरह जैसे some2 से संबंध नहीं रखता है।
इसी तरह, ऊपर दिखाए गए एक मिश्रित सरणी के लिए, array_keysइस साइट पर कहीं और सुझाए गए समाधान से काम नहीं चलेगा, क्योंकि
print_r( array_keys(array('foo', 'foo' => 'bar', 'baz', 'some' => 'value')) );
दे देंगे
Array
(
[0] => 0
[1] => foo
[2] => 1
[3] => some
)
तो जब आप करते हैं तो $array[$keys[1]]आप वास्तव में कर रहे होते हैं $array['foo']। लेकिन अगर आप उस सरणी ( 'some') में दूसरे साहचर्य मूल्य का उपयोग करना चाहते हैं , तो आप ऐसा नहीं कर सकते $array[$keys[2]]क्योंकि वह मूल्यांकन करेगा $array[1]और वह है baz।
किसी तत्व की ऑफसेट कुंजी या मूल्य से पूरी तरह से संबंधित नहीं है
print_r(
array(
100 => 'foo',
'foo' => 'bar',
50 => 'baz',
'some' => 'value'
)
);
वास्तव में मतलब है
Array
( //key value offset/position
[100] => foo // 0
[foo] => bar // 1
[50] => baz // 2
[some] => value // 3
)
जिसका मतलब है कि ऑफसेट 0 में तत्व foo है, हालांकि यह कुंजी 100 है। यदि आप किसी सरणी से ऑफसेट द्वारा तत्वों को निकालना चाहते हैं, तो आपको उपयोग करना होगा
$third = array_splice($array, 2, 1);
echo $third[0]; // baz
यह केवल तीसरी स्थिति में तत्व रखने वाली एक सरणी बनाएगा।
या आप एक का उपयोग कर सकते हैं ArrayIterator। ArrayIteratorऔजार एक Seekableअंतरफलक आप एक विशिष्ट स्थान की तलाश करने देता है / सरणी में ऑफसेट और फिर लाने कि:
$iterator = new ArrayIterator($array);
$iterator->seek(3);
echo $iterator->current(); // value