सरणी से पहला x आइटम वापस करना


139

मैं सरणी से पहले 5 आइटम वापस करना चाहता हूं। मैं यह कैसे कर सकता हूँ?


5
इस सवाल में चढ़ाव के साथ wtf?
साइलेंटगॉस्ट

2
मैंने सभी को उत्थान किया, क्योंकि प्रत्येक उत्तर अच्छा है।
विली

जवाबों:


273

array_slice एक सरणी का एक टुकड़ा देता है

$sliced_array = array_slice($array, 0, 5)

वह कोड है जिसे आप अपने मामले में पहले पांच तत्वों को वापस करना चाहते हैं


1
लेकिन यह सहयोगी सरणियों के साथ काम नहीं करेगा। चाबी खो जाती है।
ESCOBAR

4
@ESCOBAR: साहचर्य सरणियों के पास एक आदेश नहीं है, वे केवल मानों के लिए कुंजी मैप करते हैं; इसलिए "मान 3 से 7" वास्तव में वैसे भी समझ में नहीं आता है ...
knittl

सही है, लेकिन इस मामले में यह आदेश से असंबंधित है। यह पहले 5 आइटमों के बारे में है। और आप यहां array_slice का उपयोग नहीं कर सकते।
ESCOBAR

2
@ESCOBAR: यदि आपके पास कोई परिभाषित आदेश नहीं है तो कोई पहली वस्तु नहीं है। "पहले" केवल तभी काम करता है जब आप यह बता सकें कि कौन सी वस्तु अन्य वस्तुओं से पहले या बाद में आती है। लेकिन इसके मज़े के लिए, आप कुंजियों को सरणी के मानों के साथ फिर से जोड़ सकते हैं (हालाँकि अभी भी कोई परिभाषित क्रम नहीं है):array_combine(array_slice(array_keys($array), 0, 5), array_slice($array, 0, 5))
knittl

1
@dhorhorizon: " एक सरणी का एक टुकड़ा array_slice लौटाता है"। लेकिन मैं इसे थोड़ा स्पष्ट करने के लिए अपने उत्तर को संपादित करूंगा।
नाइटल

9

array_splice - सरणी का एक भाग निकालें और इसे किसी अन्य चीज़ से बदलें:

$input = array(1, 2, 3, 4, 5, 6);
array_splice($input, 5); // $input is now array(1, 2, 3, 4, 5)

PHP मैनुअल से:

array array_splice ( array &$input , int $offset [, int $length = 0 [, mixed $replacement]])

यदि लंबाई छोड़ी जाती है, तो ऑफसेट से सरणी के अंत तक सब कुछ हटा दिया जाता है । यदि लंबाई निर्दिष्ट है और सकारात्मक है, तो वह कई तत्वों को हटा दिया जाएगा। यदि लंबाई निर्दिष्ट है और ऋणात्मक है, तो हटाए गए भाग का अंत सरणी के अंत से कई तत्व होंगे। युक्ति: सरणी के अंत तक ऑफसेट से सब कुछ हटाने के लिए जब प्रतिस्थापन भी निर्दिष्ट किया जाता है, लंबाई के लिए गणना ($ इनपुट) का उपयोग करें।


($ इनपुट, 5) वाक्य रचना पहले 5 तत्वों वापस जाने के लिए array_splice है
एलैंड

@AndrejsCainikovs php.net के अनुसार, "यदि लंबाई छोड़ दी जाती है, तो अनुक्रम में आरे के अंत तक ऑफसेट से सब कुछ होगा।" उत्तरदाता के बोल्ड टेक्स्ट में ठीक इसके विपरीत बताया गया है।
कालको

@ कल्को: आप शायद गलत पृष्ठ पर देखे गए हैं। : मेरी प्रतिलिपि चिपकाया बयान अभी भी मान्य है php.net/manual/en/function.array-splice.php
Andrejs Cainikovs

@AndrejsCainikovs सच्चा दोस्त, मेरे पास array_slice के लिए पेज था और आपका जवाब array_splice के बारे में नहीं था ... मेरा बुरा: D
कालको

3

यदि आप पहले 5 तत्वों का उत्पादन करना चाहते हैं, तो आपको कुछ लिखना चाहिए:

<?php

  if (!empty ( $an_array ) ) {

    $min = min ( count ( $an_array ), 5 );

    $i = 0;

    foreach ($value in $an_array) {

      echo $value;
      $i++;
      if ($i == $min) break;

    }

  }

?>

यदि आप एक फ़ंक्शन लिखना चाहते हैं जो सरणी का हिस्सा देता है, तो आपको array_slice का उपयोग करना चाहिए:

<?php

  function GetElements( $an_array, $elements ) {
    return array_slice( $an_array, 0, $elements );
  }

?>

0

आप array_slice फ़ंक्शन का उपयोग कर सकते हैं, लेकिन क्या आप अन्य मानों का उपयोग करेंगे? या केवल पहले 5? क्योंकि यदि आप केवल पहले 5 का उपयोग करेंगे तो आप SQL पर LIMIT का उपयोग कर सकते हैं।


-4

एक अधिक वस्तु उन्मुख तरीका # [] विधि को एक सीमा प्रदान करना होगा। उदाहरण के लिए:

मान लें कि आप किसी सरणी से पहले 3 आइटम चाहते हैं।

संख्या = [1,2,3,4,5,6]

संख्या [0..2] # => [1,2,3]

मान लें कि आप किसी सरणी से पहला x आइटम चाहते हैं।

संख्या [0..x-1]

इस विधि के बारे में महान बात यह है कि यदि आप सरणी से अधिक आइटम मांगते हैं, तो यह पूरे सरणी को वापस कर देता है।

संख्या [0..100] # => [1,2,3,4,5,6]


3
लेकिन php पर्वतमाला का समर्थन नहीं करता है। क्या आप सुनिश्चित हैं कि आप रूबी के बारे में बात नहीं कर रहे हैं या ऐसा कुछ है?
विक्टर मरचुक

2
"अधिक वस्तु उन्मुख तरीका"? इस उत्तर का ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग से कोई लेना देना नहीं है।
Ducky
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.