php - एक सरणी का पहला तत्व प्राप्त करें




arrays (20)

PHP 5.4+:

array_values($array)[0];

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

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

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

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

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


अपने सहयोगी सरणी की कुंजी को संख्यात्मक अनुक्रमित सरणी के रूप में एक्सेस करने के लिए array_keys() का उपयोग करें, जिसे फिर सरणी के लिए कुंजी के रूप में उपयोग किया जा सकता है।

जब समाधान arr[0] :

(ध्यान दें, चूंकि कुंजी के साथ सरणी 0-आधारित इंडेक्स है, पहला तत्व सूचकांक 0 है)

आप एक तर्क का उपयोग कर सकते हैं और फिर अपना तर्क प्राप्त करने के लिए एक घटा सकते हैं, वह 1 => 'apple'

$i = 1;
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $arr[array_keys($arr)[$i-1]];

आउटपुट:

apple

खैर, सादगी के लिए- बस उपयोग करें:

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

आउटपुट:

apple

पहली विधि से केवल पहला तत्व नहीं है, लेकिन एक अनुक्रमित सरणी जैसे अनुक्रमित सरणी का इलाज कर सकता है।


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

// 1st item
list($firstItem) = $yourArray;

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

// 2nd item
list( , $secondItem) = $yourArray;

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

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

आपके लिए दो समाधान

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

<?php
// get 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 an reset in
// just to make sure that the array pointer is at first element
// also reset return the first element
// reset($myArray);

// return first key 
$firstKey = key($array); 

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

समाधान 3 - array_keys ()

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

उपयोग:

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

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


एक कट्टर तरीका है:

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

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

print get_first($foo);

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

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

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

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

PHP के दस्तावेज़ से :

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

विवरण:

रीसेट () पहले तत्व में सरणी के आंतरिक सूचक को रिवाइंड करता है और सरणी खाली होने पर पहले सरणी तत्व का मान देता है, या गलत होता है।


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

array_values($arr)[0]

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

array_reverse($arr)[0]

बस current($array) हल कर सकते हैं


बस करें:

array_shift(array_slice($array,0,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())));

हालांकि, यह वास्तव में अधिक है, क्योंकि call_user_func आंतरिक रूप से इस अस्थायी असाइनमेंट को निष्पादित करेगा। यह हमें पास-बाय-रेफरेंस फ़ंक्शंस का इलाज करने देता है जैसे कि वे पास-दर-मान थे, बिना किसी चेतावनी या त्रुटियों के:

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

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


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

array_shift(array_values($array));

ओ (1) में:

array_pop(array_reverse($array));

अन्य उपयोग मामलों आदि के लिए टिप्पणियों के सुझावों के साथ संपादित ...

अगर $array सरणी पॉइंटर्स को रीसेट करने की भावना में कोई समस्या नहीं है, तो आप इसका उपयोग कर सकते हैं:

reset($array);

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

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

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

array_values($array)[0];

मैं echo current($array) करूँगा।


लैरवेल के helpers :

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

सरणी को फ़ंक्शन के मान से पारित किया जा रहा है, reset() सरणी की एक प्रति के आंतरिक सूचक को प्रभावित करता है, यह मूल सरणी को स्पर्श नहीं करता है। (नोट करें कि सरणी खाली है तो यह 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;
}

संदर्भ में ध्यान देने योग्य भी है जिसमें आप यह कर रहे हैं, एक संपूर्ण जांच महंगा हो सकती है और हमेशा आवश्यक नहीं होती है।

उदाहरण के लिए, यह समाधान उस स्थिति के लिए ठीक काम करता है जिसमें मैं इसका उपयोग कर रहा हूं (लेकिन स्पष्ट रूप से सभी मामलों में भरोसा नहीं किया जा सकता है ...)

 /**
 * A quick and dirty way to determine whether the passed in array is associative or not, assuming that either:<br/>
 * <br/>
 * 1) All the keys are strings - i.e. associative<br/>
 * or<br/>
 * 2) All the keys are numeric - i.e. not associative<br/>
 * 
 * @param array $objects
 * @return boolean
 */
private function isAssociativeArray(array $objects)
{
    // This isn't true in the general case, but it's a close enough (and quick) approximation for the context in
    // which we're using it.

    reset($objects);
    return count($objects) > 0 && is_string(key($objects));
}

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

$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)

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

आउटपुट:

apple

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

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

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

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


$first_value = reset($array); // First Element's Value
$first_key = key($array); // First Element's Key

उम्मीद है की यह मदद करेगा। :)





arrays