PHP: सरणी की शुरुआत के लिए साहचर्य सरणी तत्व ले जाएँ


94

किसी भी ऐररेटिव ऐरे के किसी भी ऐरे को ऐरे की शुरुआत में ले जाने का सबसे अच्छा तरीका क्या होगा?

उदाहरण के लिए, मान लें कि मेरे पास निम्न सरणी है:

$myArray = array(
    'two'   => 'Blah Blah Blah 2',
    'three' => 'Blah Blah Blah 3',
    'one'   => 'Blah Blah Blah 1',
    'four'  => 'Blah Blah Blah 4',
    'five'  => 'Blah Blah Blah 5',
);

मैं जो करना चाहता हूं वह 'एक' तत्व को शुरुआत और अंत में निम्नलिखित सरणी के साथ ले जाना है:

$myArray = array(
    'one'   => 'Blah Blah Blah 1',
    'two'   => 'Blah Blah Blah 2',
    'three' => 'Blah Blah Blah 3',
    'four'  => 'Blah Blah Blah 4',
    'five'  => 'Blah Blah Blah 5',
);
php 

जवाबों:


182

आप +ज्ञात कुंजी ( one) का उपयोग करके एक नए साहचर्य सरणी में मूल सरणी में शामिल होने के लिए सरणी संघ ऑपरेटर ( ) का उपयोग कर सकते हैं ।

$myArray = array('one' => $myArray['one']) + $myArray;
// or      ['one' => $myArray['one']] + $myArray;

सरणी कुंजी अद्वितीय हैं, इसलिए दो स्थानों में मौजूद होना असंभव होगा।

आगे देखें ऐरे ऑपरेटर्स पर डॉक :

+ ऑपरेटर बाएं हाथ की सरणी में जोड़े गए दाहिने हाथ के सरणी को लौटाता है; उन कुंजियों के लिए जो दोनों सरणियों में मौजूद हैं, बाएं-बाएं सरणी से तत्वों का उपयोग किया जाएगा, और दाएं-हाथ सरणी से मिलान वाले तत्वों को अनदेखा किया जाएगा।


3
@andrewtweber नहीं, मैं नहीं, लेकिन मैंने कुछ परीक्षण किया और पाया कि, एमिल के दृष्टिकोण की तुलना में, यह 3x तेज है और आधी मेमोरी लेती है। मैंने यह भी पाया कि सरणी के अंत में एक ही तत्व को स्थानांतरित करने की तुलना में 20% अधिक समय लगता है।
मार्क Eirich

5

यदि आपके पास संख्यात्मक सरणी कुंजियाँ हैं और सरणी कुंजियों को फिर से बनाना चाहते हैं, तो इसे array_mergeइस तरह से रखना बेहतर होगा :

$myArray = array_merge(array($key => $value) + $myArray );

2

थोड़ा देर से, लेकिन अगर किसी को इसकी आवश्यकता है, तो मैंने यह थोड़ा स्निपेट बनाया।

function arr_push_pos($key, $value, $pos, $arr) 
{
    $new_arr = array();
    $i = 1;

    foreach ($arr as $arr_key => $arr_value) 
    {
        if($i == $pos) 
            $new_arr[$key] = $value;

        $new_arr[$arr_key] = $arr_value;

        ++$i;
    }

    return $new_arr;
}

बस अपनी आवश्यकताओं के अनुरूप इसे समायोजित करें, या इसका उपयोग करें और इंडेक्स को स्थानांतरित करने के लिए परेशान करें। सहयोगी सरणियों के साथ भी काम करता है।


एक सुधार: $ new_arr [$ arr_key] = $ arr_value; होना चाहिए: अगर ($ arr_key! = $ Key) $ new_arr [$ arr_key] = $ arr_value; लेकिन अन्यथा: उत्कृष्ट! एक ऊपर।
nzn

1

यहाँ एक और सरल वन-लाइनर है जिसका उपयोग करके इसे पूरा किया जाता है array_splice():

$myArray = array_splice($myArray,array_search('one',array_keys($myArray)),1) + $myArray;

1

यदि आपके पास 2 सरणियाँ हैं, तो 1 में तत्वों की 2 सरणी के शीर्ष पर जाने के लिए तत्व हैं, आप उपयोग कर सकते हैं

$result = \array_replace($ArrayToMoveToTop, $myArray);

यहाँ एक कोड नमूना है:

//source array    
$myArray = [
    'two' => 'Blah Blah Blah 2',
    'three' => 'Blah Blah Blah 3',
    'one' => 'Blah Blah Blah 1',
    'four' => 'Blah Blah Blah 4',
    'five' => 'Blah Blah Blah 5',
];
// set necessary order
$orderArray = [
    'one' => '',
    'two' => '',
];
//apply it
$result = \array_replace($orderArray, $myArray);
\print_r($result);

-1

Array_unshift के लिए PHP मैनुअल की टिप्पणियों में एक फ़ंक्शन है जिसका उपयोग किसी तत्व को जोड़ने के लिए किया जा सकता है, कुंजी के साथ, सरणी की शुरुआत के लिए:

function array_unshift_assoc(&$arr, $key, $val)
{
    $arr = array_reverse($arr, true);
    $arr[$key] = $val;
    return array_reverse($arr, true);
}

तत्व को अनसुना करें और उपरोक्त फ़ंक्शन के साथ इसे फिर से डालें:

$tmp = $myArray['one'];
unset($myArray['one']);
$myArray = array_unshift_assoc($myArray, 'one', $tmp);

एक अधिक सामान्य तरीका यह हो सकता है कि आप अपने सरणी को कुंजियों के आधार पर सॉर्ट करने के लिए uksort का उपयोग करें और अपने स्वयं के एक सॉर्टिंग फ़ंक्शन प्रदान करें।


हाय - जवाब के लिए धन्यवाद, हालांकि मैं किसी भी तरह से सरणी को सॉर्ट नहीं करना चाहता। मैं एक तत्व कुंजी जानना चाहता हूं और सरणी की शुरुआत में केवल उस विशेष तत्व को स्थानांतरित करना चाहता हूं

मुझे लगता है कि "=" एक वाक्यविन्यास त्रुटि है:return = array_reverse($arr, true);
मार्क Eirich

इसके अलावा, जब मैं अपने कोड को चलाने मैं केवल एक तत्व के साथ एक सरणी उस में मिलता है ... :-(
मार्क Eirich
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.