किसी सरणी का पहला तत्व प्राप्त करें


1071

मेरे पास एक सरणी है:

array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )

मैं इस सरणी का पहला तत्व प्राप्त करना चाहूंगा। अपेक्षित परिणाम: स्ट्रिंग apple

एक आवश्यकता: यह संदर्भ से गुजरने के साथ नहीं किया जा सकता है , इसलिए array_shiftएक अच्छा समाधान नहीं है।

मैं यह कैसे कर सकता हूँ?


1
आपका क्या मतलब है, संदर्भ से नहीं किया जा सकता है?
cjk

फ़ंक्शन &$arrayको परमेस के रूप में उपयोग करके काम नहीं करना चाहिए ।
hsz

4
मुझे संदेह है कि आप "वास्तव में" का अर्थ "संदर्भ द्वारा नहीं किया जा सकता है", क्या यह है कि आपके सरणी को डेटाबेस से गतिशील रूप से वापस किया जा रहा है, और आप पहले तत्व को लेने से पहले सरणी को एक चर में पारित नहीं करना चाहते हैं। इसमें से। यदि मैं सही हूं, तो नीचे दिए गए सभी समाधानों का विशाल बहुमत (स्वीकृत उत्तर सहित), अपर्याप्त हैं।
कार्टिबेस्फोरस

क्या आपको बस इसे प्राप्त करना है या इसे प्राप्त करना है और इसे मौजूदा सरणी से निकालना है?
जो स्मो

सरणी के बुनियादी उपयोग के लिए आप इस लिंक की समीक्षा कर सकते technofusions.com/introduction-to-arrays-in-php
विक्रांत वीर भल्ला

जवाबों:


1367

मूल उत्तर, लेकिन महंगा (ओ (एन)):

array_shift(array_values($array));

O (1) में:

array_pop(array_reverse($array));

अन्य उपयोग के मामले, आदि ...

यदि संशोधित करना (एरे पॉइंटर्स रीसेट करने के अर्थ में) $arrayकोई समस्या नहीं है, तो आप उपयोग कर सकते हैं:

reset($array);

यह सैद्धांतिक रूप से अधिक कुशल होना चाहिए, यदि सरणी "कॉपी" की आवश्यकता है:

array_shift(array_slice($array, 0, 1));

PHP 5.4+ के साथ (लेकिन खाली होने पर सूचकांक त्रुटि का कारण हो सकता है):

array_values($array)[0];

77
+1 सरणी_वालों के साथ मूल सरणी को संशोधित करने से रोकने के लिए चतुर समाधान के लिए ()
क्रिस

44
मुझे यह मिलता है: <b> सख्त मानक </ b>: केवल चर को संदर्भ द्वारा पारित किया जाना चाहिए। अच्छा समाधान बीटीडब्ल्यू
सिमोन

191
यह एक छोटे से अधिक नहीं है? क्या होगा यदि सरणी में कई हजारों तत्व हैं? क्या सिर्फ अपना पहला तत्व प्राप्त करने के लिए एक नया सरणी बनाना उचित है? list()और reset()मेरी राय में बहुत अच्छे समाधान हैं।
मार्टिन दिमित्रोव

33
मैं सहमत हूँ। कुल ओवरकिल और असाधारण संसाधन एक पंक्ति की तुलना में भारी है जो वर्तमान मूल्य को रीसेट और वापस करता है: रीसेट ($ सरणी);
zmonteca

48
-1 जैसा कि उपरोक्त टिप्पणीकारों ने कहा है। यह मेरे लिए चौंकाने वाला है कि इसमें 101 अपवोट हैं।
ऑर्बिट

789

जैसा कि माइक ने बताया (सबसे आसान तरीका):

$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )
echo reset($arr); // Echoes "apple"

यदि आप कुंजी प्राप्त करना चाहते हैं: (रीसेट के बाद इसे निष्पादित करें)

echo key($arr); // Echoes "4"

से पीएचपी के प्रलेखन :

मिश्रित रीसेट (सरणी और $ सरणी );

विवरण:

रीसेट () पहले तत्व के लिए सरणी के आंतरिक पॉइंटर को फिर से याद दिलाता है और यदि सरणी खाली है, तो पहले सरणी तत्व, या FALSE का मान लौटाता है।


हालाँकि इसे रीसेट के संदर्भ में पास किया गया है, लेकिन मूल सरणी को संशोधित नहीं किया गया है। मुझे लग रहा है कि यही कारण है कि hsz इसे संदर्भ से पारित नहीं करना चाहता है ..?
डेनिस जामिन

10
एरे का इटरेटर संशोधित किया गया है। यदि आप foreachविषय सरणी के साथ ऐसा करते हैं , तो आप इसे खराब कर देंगे।
Zenexer

2
@Zenexer यह हमेशा (आमतौर पर) सच नहीं होता है। आमतौर पर अभ्यास में, foreachउस सरणी को कॉपी कर लेंगे जो इसके माध्यम से लूपिंग है।
ल्यूक कजिन्स

1
रीसेट के बाद, आप कॉल कर सकते हैं key($arr)और आपको '4' मिलेगा (उत्तर में जोड़ा गया)
lep

3
न तो @Zenexer और न ही ल्यूक कजिन सही हैं: 1) फॉर्च्यूनर किसी सरणी के इंटर्नट पॉइंटर का उपयोग नहीं करता है - इसके बजाय यह खुद का पॉइंटर बनाता है। फॉर्च्यूनर के अंदर कॉलिंग रीसेट को चेक करना आसान है - लूप इसका अनुसरण करेगा, जिसके पास कोई प्रभाव नहीं है reset()। 2) नहीं, foreach एक सरणी की प्रतिलिपि नहीं बनाते हैं !!! यह केवल अपना खुद का पॉइंटर बनाता है (किसी मौजूदा की प्रति भी नहीं - यह जांचना भी आसान है, फोरच next()से पहले कॉल करना )।
dikikam

278
$first_value = reset($array); // First element's value
$first_key = key($array); // First element's key

2
मैंने वास्तव में इसका परीक्षण नहीं किया है, लेकिन ऐसा लगता है कि यह दृष्टिकोण सबसे कुशल होगा।
mason81

4
केवल समस्या मूल्य के लिए पूछा गया प्रश्न है, कुंजी नहीं। इस प्रकार वर्तमान ($ सरणी) का उपयोग कुंजी ($ सरणी) के बजाय किया जाना चाहिए
zmonteca

4
@zmonteca $ first_value = रीसेट ($ सरणी); यहां आपको मान मिलता है, रीसेट () फ़ंक्शन आंतरिक संकेतक को सरणियों को फिर से याद दिलाता है और पहला तत्व देता है।
S3Mi

1
सबसे अच्छा जवाब! पहले मूल्य प्राप्त करने के लिए कुंजी () तुल्यता की तलाश कर रहा था। इससे मदद मिलती है!
एलेन टिम्बेलो

98
$arr = array( 9 => 'apple', 7 => 'orange', 13 => 'plum' );
echo reset($arr); // echoes 'apple'

यदि आप वर्तमान पॉइंटर पोज़िशन को नहीं खोना चाहते हैं, तो बस ऐरे के लिए एक उपनाम बनाएं।


1
यह नहीं मिला, तुम्हारा क्या मतलब है? यह ठीक काम करता है कि क्या पहले की चाबी दूसरे की तुलना में बड़ी है।
योडा

29
+1 ईवीआई reset()पहले से ही पहले तत्व को लौटाता है, इसलिए उपयोग करने की कोई आवश्यकता नहीं है current()- echo reset($arr)पर्याप्त होना चाहिए
माइक

@Mike लेकिन आप पसंद कर सकते हैं currentकरने के लिए resetPHP नोटिस / संदर्भ मामलों में उत्पादित त्रुटि, जैसे से बचने के लिए current(array_filter(...));में 3v4l
CPHPython

91

current($array)PHP मैन्युअल के अनुसार , आपको सरणी का पहला तत्व मिल सकता है ।

प्रत्येक सरणी में इसके "वर्तमान" तत्व के लिए एक आंतरिक सूचक होता है, जिसे पहले तत्व में डाला जाता है।

इसलिए यह तब तक काम करता है जब तक आप सरणी पॉइंटर को फिर से तैनात नहीं करते हैं, और अन्यथा आपको सरणी रीसेट करना होगा।


4
मुझे नहीं पता कि यह स्वीकृत उत्तर क्यों नहीं था, क्योंकि यह प्रश्न का सरल और सटीक उत्तर देता है।
relipse

26
current($array)केवल तभी काम करेगा जब सरणी सूचक "वर्तमान" पहले तत्व की ओर इशारा करता है, अन्यथा reset($array)आवश्यक होगा।
जॉन

6
ऐसा लगता है कि current()अब किसी संदर्भ की आवश्यकता नहीं है, हालांकि PHP डॉक्स इसे प्रतिबिंबित नहीं करते हैं। इसलिए मुझे लगता है कि यह सबसे अच्छा समाधान बन गया है।
रेयान

@ रियान सहमत हो गया, लेकिन इस सूत्र के इस अन्य उत्तर में 2014 से 2 साल पहले यह समाधान दिया गया था ... अजीब है कि इस अधूरे वाक्य को और अधिक बढ़ावा मिला।
CPHPython

70

आप भाषा निर्माण, "सूची" के साथ Nth तत्व प्राप्त कर सकते हैं:

// First item
list($firstItem) = $yourArray;

// First item from an array that is returned from a function
list($firstItem) = functionThatReturnsArray();

// Second item
list( , $secondItem) = $yourArray;

array_keysफ़ंक्शन के साथ आप कुंजियों के लिए ऐसा कर सकते हैं:

list($firstKey) = array_keys($yourArray);
list(, $secondKey) = array_keys($yourArray);

2
यह वही है जो मैं करता हूं: list($first_value) = $my_array;मेरी राय में, सबसे अच्छा विकल्प। यहां प्रस्तुत अन्य उत्तरों से इसके मुद्दे नहीं हैं: कोई "ओवरकिल" नहीं है क्योंकि यह कॉपी या सरणी नहीं बनाता है या एक नया बनाता है। कोई "संदर्भ" नहीं: सरणी संशोधित नहीं है। "रीसेट" नहीं: सरणी आंतरिक पॉइंटर में कोई परिवर्तन नहीं ...
जे। ब्रुनी

6
बहुत ही सुंदर समाधान, लेकिन सरणी खाली होने पर एक E_NOTICE फेंकता है।
TGR

1
@Mike हाँ, लेकिन फिर यह इतना सुंदर अब और है :)
TGR

13
क्या यह गलत नहीं है ?! यह केवल तभी काम करता है जब सरणी कुंजियाँ होती हैं int, करने की कोशिश करें list($firstItem) = array('key1' => 'value1');और आपको एक त्रुटि Notice: Undefined offset: 0
मिलेगी

12
स्पष्ट करने के लिए: list($x) = foo();के बराबर है $x = foo()[0];। ध्यान दें कि यह जरूरी नहीं है कि "पहले आइटम प्राप्त करें", क्योंकि एक पूर्णांक-अनुक्रमित सरणी में कुंजी के साथ एक तत्व नहीं हो सकता है 0. मेरे मामले में मैं "सूची ($ आदेश) = get_order ($ उपयोगकर्ता) कर रहा था। , " लेकिन "get_order" उनकी आईडी द्वारा बंद किए गए आदेश लौटा रहा था, जो आमतौर पर 0. नहीं था। जैसा कि @Sergiy कहते हैं, array_values ​​() इसे ठीक करता है, लेकिन दक्षता और (और अधिक महत्वपूर्ण रूप से) कोड की पठनीयता में बाधा डालता है।
वारबो

55

PHP 5.4+:

array_values($array)[0];

यह उन शांत लोगों के लिए है जो नवीनतम और महानतम चलाते हैं। ;)
ज़ेनेक्स

1
उन्होंने मेरे उत्तर को शामिल करने के लिए अक्टूबर -2013 में अपना उत्तर संपादित किया जो मैंने अप्रैल में जोड़ा था।
समीर अता

PHP 4:$array_values = array_values($array); $value = $array_values[0];
zdick

38

PHP 7.3 ने मूल सरणी के संशोधन के बिना और किसी भी अस्थायी ऑब्जेक्ट को बनाए बिना सीधे सरणी की पहली और अंतिम कुंजी प्राप्त करने के लिए दो कार्य जोड़े :

शब्दार्थ रूप से सार्थक होने के अलावा, ये फ़ंक्शन सरणी पॉइंटर को भी स्थानांतरित नहीं करते हैं (जैसा foreachकि होगा)।

कुंजियाँ होने से, मान सीधे कुंजियों द्वारा प्राप्त कर सकते हैं।


उदाहरण (उन सभी को PHP 7.3+ की आवश्यकता होती है)

पहली / अंतिम कुंजी और मूल्य प्राप्त करना:

$my_array = ['IT', 'rules', 'the', 'world'];

$first_key = array_key_first($my_array);
$first_value = $my_array[$first_key];

$last_key = array_key_last($my_array);
$last_value = $my_array[$last_key];

एक-लाइनर के रूप में पहला / अंतिम मूल्य प्राप्त करना, यह मानते हुए कि खाली नहीं हो सकता है :

$first_value = $my_array[ array_key_first($my_array) ];

$last_value = $my_array[ array_key_last($my_array) ];

एक-लाइनर के रूप में पहला / अंतिम मूल्य प्राप्त करना, खाली सरणियों के लिए चूक के साथ:

$first_value = empty($my_array) ? 'default' : $my_array[ array_key_first($my_array) ];

$last_value = empty($my_array) ? 'default' : $my_array[ array_key_last($my_array) ];

अशक्त-सहवर्ती ऑपरेटर के साथ छोटा , आमतौर पर अशक्त डिफ़ॉल्ट होता है: $first_value = $my_array[array_key_first($my_array)] ?? null;
मिशेल मैककेना

29

मान लीजिए:

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

महज प्रयोग करें:

$array[key($array)]

पहला तत्व पाने के लिए या

key($array)

पहली कुंजी पाने के लिए।

या आप पहले हटा सकते हैं यदि आप इसे हटाना चाहते हैं।


9
Wht currentतो बस का उपयोग नहीं ?
मार्को डेमायो

27

कुछ सरणियाँ जैसे कार्यों के साथ काम नहीं करती हैं list, resetया current। शायद वे "अशुद्ध" सरणियाँ हैं - उदाहरण के लिए आंशिक रूप से एरियरइंटरेटर को लागू करना।

यदि आप ऐरे की परवाह किए बिना पहला मान खींचना चाहते हैं, तो आप एक इटरेटर को शॉर्ट-सर्किट कर सकते हैं:

foreach($array_with_unknown_keys as $value) break;

आपका मान तब उपलब्ध $valueहोगा और पहले पुनरावृत्ति के बाद लूप टूट जाएगा। यह array_unshift (array_values ​​($ arr)) जैसे फ़ंक्शन के लिए संभावित रूप से बड़े सरणी की प्रतिलिपि बनाने से अधिक कुशल है।

आप कुंजी को इस तरह भी पकड़ सकते हैं:

foreach($array_with_unknown_keys as $key=>$value) break;

यदि आप इसे किसी फ़ंक्शन से कॉल कर रहे हैं, तो बस जल्दी लौटें:

function grab_first($arr) {
    foreach($arr as $value) return $value;
}

मुझे लगता है कि यह सबसे तेज़ तरीकों में से एक है क्योंकि भाषा का उपयोग फंक्शन कॉल (जो अधिक महंगा है) के बजाय फ़ॉरचेक का उपयोग करता है। designcise.com/web/tutorial/…
Ildar

19

से Laravel के सहायकों :

function head($array)
{
    return reset($array);
}

फ़ंक्शन के मान से पास किया जा रहा सरणी, रीसेट () सरणी की प्रतिलिपि के आंतरिक पॉइंटर को प्रभावित करता है, और यह मूल सरणी को नहीं छूता है (ध्यान दें कि यह falseसरणी खाली होने पर वापस लौटता है)।

उपयोग उदाहरण:

$data = ['foo', 'bar', 'baz'];

current($data); // foo
next($data); // bar
head($data); // foo
next($data); // baz

इसके अलावा, यहां एक विकल्प है। यह बहुत मामूली रूप से तेज़ है, लेकिन अधिक दिलचस्प है। यह आसानी से डिफ़ॉल्ट मान को बदलने देता है यदि सरणी खाली है:

function head($array, $default = null)
{
    foreach ($array as $item) {
        return $item;
    }
    return $default;
}

रिकॉर्ड के लिए, यहाँ मेरा एक और जवाब है , सरणी के अंतिम तत्व के लिए।


17

इसे सरल रखें! यहां बहुत सारे सही उत्तर हैं, लेकिन सभी भ्रमों को कम करने के लिए, ये दो काम करते हैं और बहुत अधिक ओवरहेड को कम करते हैं:

key($array)किसी सरणी की पहली कुंजी को किसी सरणी
current($array)का पहला मान मिलता है


EDIT:
नीचे दी गई टिप्पणियों के बारे में। निम्न उदाहरण आउटपुट करेगा:string(13) "PHP code test"

$array = array
(
   '1'           => 'PHP code test',  
   'foo'         => 'bar', 5 , 5 => 89009, 
   'case'        => 'Random Stuff: '.rand(100,999),
   'PHP Version' => phpversion(),
   0             => 'ending text here'
);

var_dump(current($array));

11
उह। currentवर्तमान तत्व के बराबर है। आपको यह सुनिश्चित करने के लिए कि यह वास्तव में शुरुआत में है, सरणी की शुरुआत में सूचक को रीसेट करना होगा।
वाटरलूमैट

करंट () को वर्तमान तत्व मिलेगा, न कि पहला तत्व। ये अलग है।
अमीरहोसिन तार्मास्ट 17

यदि सरणी में केवल एक तत्व है तो करंट काम करेगा।
ज़मीर फ़ूज़न


14

मैं करता echo current($array)


1
@sz कोई फर्क नहीं पड़ता, current()जब गैर-संदर्भ पारित किए जाते हैं तो त्रुटि नहीं होती है। बशर्ते कि सूचक अभी भी इस काम की शुरुआत में है।
डैन लुग जूल

लेकिन यह एक नोटिस पैदा करता है जो आपके लॉग को गंदा और अच्छी तरह से बनाता है ... आपको नोटिस से छुटकारा पाना चाहिए, अगर वे महत्वपूर्ण नहीं हैं
dmikam

1
@ मानिकम नहीं यह नहीं है। असल में resetपैदा करता है "केवल चर संदर्भ द्वारा पारित किया जाना चाहिए" नोटिस जबकि currentनहीं करता है: ऑनलाइन पीएचपी संपादक उदाहरणcurrent(array_filter(...));
CPHPython

@CPHPython, ऐसा लगता है जैसे आप सही हैं ... ऐसा लगता है जैसे मुझे PHP 4 के पुराने समय से वर्तमान का यह विचार था कि यह वास्तव में घातक त्रुटि कैसे उत्पन्न करता है: sandbox.onlinephpfunctions.com/code/… वर्तमान में उपयोग कर रहा एकमात्र मुद्दा यह गारंटी नहीं देता है कि लौटाया गया तत्व किसी सरणी का पहला तत्व है (आंतरिक पॉइंटर को फ़ंक्शन द्वारा संशोधित किया जा सकता है)। वस्तुतः यह एक सरणी के यादृच्छिक तत्व को वापस कर सकता है।
dikikam

1
@CPHPython एक बिट कृत्रिम उदाहरण है, लेकिन यह मेरे विचारों को अच्छी तरह से प्रदर्शित करता है: sandbox.onlinephpfunctions.com/code/… बस कल्पना करें कि आप अपने फ़ंक्शन को किसी ऐसे फ़ंक्शन से प्राप्त करते हैं जो उपयोग करता है next(), end()या कोई अन्य फ़ंक्शन जो सरणी के आंतरिक पॉइंटर को संशोधित करता है। मेरे उदाहरण में, current()अशक्त लौटता है क्योंकि आंतरिक सूचक सरणी के "सीमा से बाहर" है। लेकिन यह 'वस्तुतः' किसी भी / यादृच्छिक तत्व को भी इंगित कर सकता है।
dikikam

13
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
foreach($arr as $first) break;
echo $first;

आउटपुट:

apple

10
$myArray = array (4 => 'apple', 7 => 'orange', 13 => 'plum');
$arrayKeys = array_keys($myArray);

// The first element of your array is:
echo $myArray[$arrayKeys[0]];

मैं स्वीकार किए गए उत्तर में वर्णित तरीके से नहीं गया। आपका धन्यवाद
जयकंदरी

9
$array=array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

$firstValue = each($array)[1];

यह फ़ंक्शन की तुलना में बहुत अधिक कुशल है array_values()क्योंकि each()फ़ंक्शन पूरे सरणी की प्रतिलिपि नहीं बनाता है।

अधिक जानकारी के लिए http://www.php.net/manual/en/function.each.php देखें


because the each() function does not copy the entire array.+1

2
लेकिन बात यह है कि आपको पहले एक रीसेट करना चाहिए, अगर आंतरिक पॉइंटर शुरुआत में नहीं है, तो आप पहले तत्व को प्राप्त नहीं करने जा रहे हैं।
कार्लोस गोस

लेकिन प्रत्येक () संदर्भ द्वारा एक सरणी प्राप्त करता है और प्रारंभिक प्रश्नों की आवश्यकता को ऐसा करने के लिए नहीं है
dmikam

8

एक कीचड़ रास्ता है:

$foo = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

function get_first ($foo) {
    foreach ($foo as $k=>$v){
        return $v;
    }
}

print get_first($foo);

3
कम से कम आप ईमानदार हैं - यह हास्यास्पद है! लेकिन, यह काम करता है, और मैंने अतीत में इसका उपयोग सूची () तकनीक सीखने तक किया है।
random_user_name

1
यदि आप ऐसा कर रहे हैं, तो आप वैसे भी उपयोग कर सकते हैं reset()जैसा कि सरणी पॉइंटर को रीसेट करने से पहले foreachवैसे भी कहा जाता है।
टाइजॉइड

7

पहला तत्व प्राप्त करें:

array_values($arr)[0]

अंतिम तत्व प्राप्त करें

array_reverse($arr)[0]

संख्यात्मक कुंजी को array_reverse के साथ संरक्षित किया जाता है, ताकि अभी भी पहला तत्व वापस आ जाए। 3v4l.org/2729s
पैनिक

7

इनमें से अधिकांश काम करते हैं! त्वरित सिंगल लाइन (कम संसाधन) कॉल के लिए BUT:

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $array[key($array)];

// key($array) -> will return the first key (which is 4 in this example)

हालांकि यह काम करता है, और शालीनता से, कृपया मेरा अतिरिक्त जवाब भी देखें: https://stackoverflow.com/a/48410351/1804013


5
यह उपयोग करने के बराबर है current($array), जिसके लिए यह आवश्यक है कि सरणी का आंतरिक पॉइंटर वैसे भी पहले तत्व पर हो, जिस स्थिति में echo reset($array)वह सबसे उपयुक्त हो।
टाइजॉइड

@ टायज़ॉइड ने वास्तव में आपके सुझाव के साथ यहां एक और उत्तर लिखा था , लेकिन उन्होंने आपके स्पष्टीकरण को छोड़ दिया ... धन्यवाद।
CPHPython

@ टायज़ॉइड: मैंने एक अतिरिक्त उत्तर दिया / थोड़ी देर के लिए अपडेट करें: stackoverflow.com/a/48410351/1804013
tfont

5

मुझे लगता है कि array_values का उपयोग करना यहां आपकी सबसे अच्छी शर्त होगी। आप 'सेब' प्राप्त करने के लिए उस फ़ंक्शन के परिणाम से इंडेक्स शून्य पर मान वापस कर सकते हैं।


5

इस खेल में थोड़ी देर हो गई है, लेकिन मुझे एक समस्या के साथ प्रस्तुत किया गया था, जहाँ मेरे सरणी में इसके अंदर बच्चों के रूप में सरणी तत्व शामिल थे, और इस तरह मैं पहले सरणी तत्व का केवल एक स्ट्रिंग प्रतिनिधित्व नहीं प्राप्त कर सका। द्वारा पीएचपी का उपयोग current()समारोह , मैं इस में कामयाब रहे:

<?php
    $original = array(4 => array('one', 'two'), 7 => array('three', 'four'));
    reset($original);  // to reset the internal array pointer...
    $first_element = current($original);  // get the current element...
?>

सभी मौजूदा समाधानों की बदौलत मुझे इस उत्तर को पाने में मदद मिली, मुझे उम्मीद है कि इससे किसी न किसी को मदद मिलेगी!


4

उपयोग:

$first = array_slice($array, 0, 1);  
$val= $first[0];

डिफ़ॉल्ट रूप से, array_sliceकुंजियों को संरक्षित नहीं करता है, इसलिए हम सुरक्षित रूप से सूचकांक के रूप में शून्य का उपयोग कर सकते हैं।


4

आपके लिए दो उपाय।

समाधान 1 - बस कुंजी का उपयोग करें। आपने यह नहीं कहा है कि आप इसका उपयोग नहीं कर सकते। :)

<?php
    // Get the first element of this array.
    $array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

    // Gets the first element by key
    $result = $array[4];

    // Expected result: string apple
    assert('$result === "apple" /* Expected result: string apple. */');
?>

समाधान 2 - array_flip () + कुंजी ()

<?php
    // Get first element of this array. Expected result: string apple
    $array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

    // Turn values to keys
    $array = array_flip($array);

    // You might thrown a reset in just to make sure
    // that the array pointer is at the first element.
    // Also, reset returns the first element.
    // reset($myArray);

    // Return the first key
    $firstKey = key($array);

    assert('$firstKey === "apple" /* Expected result: string apple. */');
?>

समाधान 3 - array_keys ()

echo $array[array_keys($array)[0]];

2

वास्तविक दुनिया में यह इतनी सरल प्रतिक्रिया नहीं है। मान लीजिए कि हमारे पास संभावित प्रतिक्रियाओं के ये उदाहरण हैं जो आप कुछ पुस्तकालयों में पा सकते हैं।

$array1 = array();
$array2 = array(1,2,3,4);
$array3 = array('hello'=>'world', 'foo'=>'bar');
$array4 = null;

var_dump('reset1', reset($array1));
var_dump('reset2', reset($array2));
var_dump('reset3', reset($array3));
var_dump('reset4', reset($array4)); // Warning

var_dump('array_shift1', array_shift($array1));
var_dump('array_shift2', array_shift($array2));
var_dump('array_shift3', array_shift($array3));
var_dump('array_shift4', array_shift($array4)); // Warning

var_dump('each1', each($array1));
var_dump('each2', each($array2));
var_dump('each3', each($array3));
var_dump('each4', each($array4)); // Warning

var_dump('array_values1', array_values($array1)[0]); // Notice
var_dump('array_values2', array_values($array2)[0]);
var_dump('array_values3', array_values($array3)[0]);
var_dump('array_values4', array_values($array4)[0]); // Warning

var_dump('array_slice1', array_slice($array1, 0, 1));
var_dump('array_slice2', array_slice($array2, 0, 1));
var_dump('array_slice3', array_slice($array3, 0, 1));
var_dump('array_slice4', array_slice($array4, 0, 1)); // Warning

list($elm) = $array1; // Notice
var_dump($elm);
list($elm) = $array2;
var_dump($elm);
list($elm) = $array3; // Notice
var_dump($elm);
list($elm) = $array4;
var_dump($elm);

जैसा कि आप देख सकते हैं, हमारे पास कई 'एक लाइन' समाधान हैं जो कुछ मामलों में अच्छी तरह से काम करते हैं, लेकिन सभी में नहीं।

मेरी राय में, आपके पास केवल एडर के साथ ही हैंडलर होना चाहिए।

अब प्रदर्शन के बारे में बात करते हुए, यह मानते हुए कि हमारे पास हमेशा सरणी है, जैसे:

$elm = empty($array) ? null : ...($array);

...you would use without errors:
$array[count($array)-1];
array_shift
reset
array_values
array_slice

array_shiftकी तुलना में तेज है reset, कि [गिनती () - 1] की तुलना में अधिक तेज है, और ये तीनों की तुलना में तेजी से array_valuesऔर हैं array_slice


2

मैं कल्पना करता हूं कि लेखक सिर्फ एक फ़ंक्शन ( mysql_fetch_row , उदाहरण के लिए) से प्राप्त करने के बाद एक सरणी का पहला तत्व प्राप्त करने के लिए एक रास्ता देख रहा था , एक STRICT उत्पन्न किए बिना "केवल चर संदर्भ द्वारा पारित किया जाना चाहिए"।

यदि ऐसा है, तो यहां वर्णित लगभग सभी तरीकों से यह संदेश मिलेगा ... और उनमें से कुछ अतिरिक्त मेमोरी का उपयोग करके एक सरणी (या इसके कुछ भाग) को दोहराते हैं। इससे बचने का एक आसान तरीका यह है कि उन कार्यों में से किसी को कॉल करने से पहले केवल वैल्यू इनलाइन निर्दिष्ट किया जाए:

$first_item_of_array = current($tmp_arr = mysql_fetch_row(...));
// or
$first_item_of_array = reset($tmp_arr = func_get_my_huge_array());

इस तरह आपको स्क्रीन पर और न ही लॉग में STRICT संदेश नहीं मिलता है, और आप कोई अतिरिक्त सारणी नहीं बनाते हैं। यह अनुक्रमित और साहचर्य सरणियों के साथ काम करता है ।


1

मुझे "सूची" उदाहरण पसंद है, लेकिन "सूची" केवल एक असाइनमेंट के बाईं ओर काम करता है। यदि हम एक चर को निर्दिष्ट नहीं करना चाहते हैं, तो हमें एक अस्थायी नाम बनाने के लिए मजबूर किया जाएगा, जो हमारे क्षेत्र को सबसे अच्छा प्रदूषित करता है और एक मौजूदा मूल्य को सबसे खराब रूप से लिखता है:

list($x) = some_array();
var_dump($x);

ऊपर $ x के किसी भी मौजूदा मूल्य को अधिलेखित कर दिया जाएगा, और जब तक यह दायरा सक्रिय है (इस फ़ंक्शन / विधि का अंत, या हमेशा शीर्ष स्तर पर रहने पर) तब तक $ x वैरिएबल चारों ओर लटका रहेगा। यह call_user_func और एक अनाम फ़ंक्शन का उपयोग करके काम किया जा सकता है, लेकिन यह क्लंकी है:

var_dump(call_user_func(function($arr) { list($x) = $arr; return $x; },
                        some_array()));

यदि हम इस तरह अनाम कार्यों का उपयोग करते हैं, तो हम वास्तव में रीसेट और array_shift के साथ दूर हो सकते हैं, भले ही वे पास-बाय-संदर्भ का उपयोग करते हैं। ऐसा इसलिए है क्योंकि एक फ़ंक्शन को कॉल करना उसके तर्कों को बाध्य करेगा, और इन तर्कों को संदर्भ द्वारा पारित किया जा सकता है:

var_dump(call_user_func(function($arr) { return reset($arr); },
                        array_values(some_array())));

हालाँकि, यह वास्तव में overkill है, क्योंकि call_user_func आंतरिक रूप से यह अस्थायी असाइनमेंट करेगा। इससे हम पास-पास-संदर्भ कार्यों का इलाज कर सकते हैं जैसे कि वे बिना किसी चेतावनी या त्रुटियों के पास-पास-मूल्य थे।

var_dump(call_user_func('reset', array_values(some_array())));


1

मैं सरणी के आंतरिक सूचक के साथ नगण्य पसंद नहीं, लेकिन यह भी के साथ एक दूसरे सरणी के निर्माण के लिए अक्षम है array_keys()या array_values(), तो मैं आम तौर पर इस निर्धारित किए हैं:

function array_first(array $f) {
    foreach ($f as $v) {
        return $v;
    }
    throw new Exception('array was empty');
}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.