php - प्रेम रावत ज्ञान कुंजी हिंदी




एक(संभवतः) सहयोगी सरणी में पहली कुंजी प्राप्त करें? (13)

संभावित रूप से सहयोगी सरणी में पहली कुंजी निर्धारित करने का सबसे अच्छा तरीका क्या है? मेरा पहला विचार था कि यह सिर्फ सरणी को फेंकने के लिए और फिर इसे तोड़ने के बाद, इस तरह:

foreach ($an_array as $key => $val) break;

इस प्रकार $ कुंजी होने पर पहली कुंजी होती है, लेकिन यह अक्षम दिखती है। क्या किसी के पास बेहतर समाधान है?


आज मुझे एक पोस्ट अनुरोध द्वारा लौटाए गए मेरी सरणी की पहली कुंजी खोजनी पड़ी। (और एक फॉर्म आईडी आदि के लिए संख्या नोट करें)

खैर, मुझे यह मिल गया है: PHP में सहयोगी सरणी की पहली कुंजी लौटें

key

मैंने यह किया है, और यह काम करता है।

    $data = $request->request->all();
    dump($data);
    while ($test = current($data)) {
        dump($test);
        echo key($data).'<br />';die();
        break;
    }

शायद यह एक अन्य लड़के के 15min ईको होगा। CYA।


आप reset और key उपयोग कर सकते हैं:

reset($array);
$first_key = key($array);

यह अनिवार्य रूप से आपके प्रारंभिक कोड जैसा ही है, लेकिन थोड़ा कम ओवरहेड के साथ, और यह और भी स्पष्ट है कि क्या हो रहा है।

बस reset कॉल करना याद रखें, या आपको सरणी में से कोई भी कुंजी मिल सकती है। अंतिम कुंजी प्राप्त reset लिए आप reset बजाय end उपयोग भी कर सकते हैं।

यदि आप पहली मान प्राप्त करने की कुंजी चाहते थे, तो reset वास्तव में इसे वापस कर देता है:

$first_value = reset($array);

यद्यपि देखने के लिए एक विशेष मामला है (इसलिए पहले सरणी की लंबाई जांचें):

$arr1 = array(false);
$arr2 = array();
var_dump(reset($arr1) === reset($arr2)); // bool(true)

आप इसे आजमा सकते हैं। सरणी का पहला मान प्राप्त करने के लिए: -

<?php
        $large_array = array('foo' => 'bar', 'hello' => 'world');
        var_dump(current($large_array));
?>

सरणी की पहली कुंजी प्राप्त करने के लिए

<?php
        $large_array = array('foo' => 'bar', 'hello' => 'world');
        $large_array_keys = array_keys($large_array);
        var_dump(array_shift($large_array_keys));
?>

एक लाइनर:

$array = array('key1'=>'value1','key2'=>'value2','key3'=>'key3');
echo key( array_slice( $array, 0, 1, true ) );

# echos 'key1'

तुम कोशिश कर सकते हो

array_keys($data)[0]

दिलचस्प बात यह है कि फोरैच लूप वास्तव में ऐसा करने का सबसे प्रभावी तरीका है।

चूंकि ओपी ने विशेष रूप से दक्षता के बारे में पूछा है, इसलिए यह ध्यान दिया जाना चाहिए कि सभी वर्तमान उत्तर वास्तव में एक foreach से बहुत कम कुशल हैं।

मैंने php 5.4 के साथ इस पर एक बेंचमार्क किया था, और रीसेट / कुंजी सूचक विधि (स्वीकृत उत्तर) एक foreach से लगभग 7 गुना धीमा लगता है। पूरे सरणी (array_keys, array_flip) में हेरफेर करने वाले अन्य दृष्टिकोण स्पष्ट रूप से उससे भी धीमे होते हैं और बड़े सरणी के साथ काम करते समय बहुत खराब हो जाते हैं।

Foreach बिल्कुल अक्षम नहीं है, इसका उपयोग करने के लिए स्वतंत्र महसूस करें!

2015-03-03 संपादित करें:

बेंचमार्क स्क्रिप्ट का अनुरोध किया गया है, मेरे पास मूल नहीं हैं बल्कि इसके बजाय कुछ नए परीक्षण किए गए हैं। इस बार मैंने रीसेट / कुंजी के रूप में केवल दो बार उपवास पाया। मैंने 100-कुंजी सरणी का उपयोग किया और कुछ ध्यान देने योग्य अंतर प्राप्त करने के लिए प्रत्येक विधि को दस लाख बार चलाया, यहां सरल बेंचमार्क का कोड है:

$array = [];
for($i=0; $i < 100; $i++)
    $array["key$i"] = $i;

for($i=0, $start = microtime(true); $i < 1000000; $i++) {
    foreach ($array as $firstKey => $firstValue) {
        break;
    }
}
echo "foreach to get first key and value: " . (microtime(true) - $start) . " seconds <br />";

for($i=0, $start = microtime(true); $i < 1000000; $i++) {
    $firstValue = reset($array);
    $firstKey = key($array);
}
echo "reset+key to get first key and value: " . (microtime(true) - $start) . " seconds <br />";

for($i=0, $start = microtime(true); $i < 1000000; $i++) {
    reset($array);
    $firstKey = key($array);
}
echo "reset+key to get first key: " . (microtime(true) - $start) . " seconds <br />";


for($i=0, $start = microtime(true); $i < 1000000; $i++) {
    $firstKey = array_keys($array)[0];
}
echo "array_keys to get first key: " . (microtime(true) - $start) . " seconds <br />";

मेरे PHP 5.5 पर यह आउटपुट:

foreach to get first key and value: 0.15501809120178 seconds 
reset+key to get first key and value: 0.29375791549683 seconds 
reset+key to get first key: 0.26421809196472 seconds 
array_keys to get first key: 10.059751987457 seconds

रीसेट + कुंजी http://3v4l.org/b4DrN/perf#tabs
foreach http://3v4l.org/gRoGD/perf#tabs


यदि दक्षता आपके लिए महत्वपूर्ण नहीं है, तो आप PHP 5.4 (और उच्चतर) में array_keys($yourArray)[0] का उपयोग कर सकते हैं।

उदाहरण:

# 1
$arr = ["my" => "test", "is" => "best"];    
echo array_keys($arr)[0] . "\r\n"; // prints "my"


# 2
$arr = ["test", "best"];
echo array_keys($arr)[0] . "\r\n"; // prints "0"

# 3
$arr = [1 => "test", 2 => "best"];
echo array_keys($arr)[0] . "\r\n"; // prints "1"

समाधान पर लाभ:

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

यह है कि आप एक फंक्शन पैरामीटर के रूप में array_keys($arr)[0] पास कर सकते हैं (यानी doSomething(array_keys($arr)[0], $otherParameter) )।

HTH


यह एक समाधान भी हो सकता है।

$first_key = current(array_flip($array));

मैंने इसका परीक्षण किया है और यह काम करता है।


रिक्त पुनरावर्तनीय / सरणी के लिए फ़ॉलबैक के साथ एक और सार्वभौमिक और सुरक्षित संस्करण:

नोट: $ सरणी iterable एक array या iterable (PHP> = 7.1)

$array = [/* ... */]; // my array or iterable

// these lines are a fallback for the case nothing is found
$firstKey = null; // null or default value of your choice
$firstValue = null; // null or default value of your choice

// iterating the array
foreach ($array as $firstKey => $firstValue) {
    // stop after first iteration
    break;
}

टीएलडीआर: इस तरह आपको इसे पुन: जांचने की आवश्यकता नहीं है। (इस मामले में सरणी)।

Foreach सब कुछ खत्म करने का सबसे तेज़ तरीका है।

सिफारिशें और स्पष्टीकरण: मैं $firstKey और $firstValue लिए डिफ़ॉल्ट मानों को सेट करने की अनुशंसा करता हूं, फिर भी आप जानते हैं कि सरणी खाली थी या नहीं।

नोट: यदि आप भरोसा करते हैं कि आपकी सरणी हमेशा पॉप्युलेट हो जाएगी तो डिफ़ॉल्ट मानों की कोई आवश्यकता नहीं है। (लेकिन इसके बारे में 100% सुनिश्चित हो!)

अधिक उन्नत सामग्री के लिए स्पष्टीकरण:

यदि आपके पुनरावर्तनीय के पास कस्टम Iterator तो आपको फ़ोरैच स्टेटमेंट के बाद इसे मैन्युअल रूप से रीसेट करने की आवश्यकता हो सकती है।

PHP के बारे में अधिक : iterables


array_keys कुंजी की एक सरणी देता है। पहली प्रविष्टि लें। वैकल्पिक रूप से, आप सरणी पर reset कर सकते हैं, और बाद में key । उत्तरार्द्ध दृष्टिकोण शायद थोड़ा तेज़ है (यदि मैंने इसका परीक्षण नहीं किया), लेकिन इसका आंतरिक सूचक को रीसेट करने का दुष्प्रभाव है।


Webmut के समाधान पर बढ़ाने के लिए, मैंने निम्नलिखित समाधान जोड़ा है:

$firstKey = array_keys(array_slice($array, 0, 1, TRUE))[0];

PHP 7.1 पर मेरे लिए आउटपुट है:

foreach to get first key and value: 0.048566102981567 seconds 
reset+key to get first key and value: 0.11727809906006 seconds 
reset+key to get first key: 0.11707186698914 seconds 
array_keys to get first key: 0.53917098045349 seconds 
array_slice to get first key: 0.2494580745697 seconds 

अगर मैं 10000 आकार की सरणी के लिए ऐसा करता हूं, तो परिणाम बन जाते हैं

foreach to get first key and value: 0.048488140106201 seconds 
reset+key to get first key and value: 0.12659382820129 seconds 
reset+key to get first key: 0.12248802185059 seconds 
array_slice to get first key: 0.25442600250244 seconds 

Array_keys विधि 30 सेकंड पर समाप्त होती है (केवल 1000 तत्वों के साथ, बाकी के लिए समय समान था, लेकिन array_keys विधि के बारे में 7.5 सेकंड था)।


 $arr = array('key1'=>'value1','key2'=>'value2','key3'=>'key3');
 list($first_key) = each($arr);
 print $first_key;
 // key1

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




arrays