यह जांचने का एक बेहतर तरीका है कि क्या सरणी में एक से अधिक तत्व हैं?


177

मुझे केवल यह जांचने की आवश्यकता है कि क्या किसी सरणी में एक से अधिक तत्व हैं। मैं इसे इस तरह से करने की कोशिश कर रहा हूं:

if (isset($arr['1']))

दूसरा पारंपरिक तरीका है

if (sizeof($arr)>1)

दोनों में से कौन बेहतर है? ऐसे स्थिति में, मुझे दो वैकल्पिक तरीकों के बीच कैसे न्याय करना चाहिए? क्या कोई प्रदर्शन जांच मीटर उपलब्ध है जो मापने के लिए बेहतर है?


यहाँ मान लिया गया है कि $ गिरफ्तारी एक सरणी के लिए पहले से ही मान्य है! इसका मतलब है, इससे पहले कि अगर यह स्थिति की जाँच करें, तो इसकी पहले से ही जाँच की अगर इसकी एक सरणी है।
tuxnani

जवाबों:


342

इसे इस्तेमाल करो

if (sizeof($arr) > 1) {
     ....
}

या

if (count($arr) > 1) {
     ....
}

sizeof()के लिए एक उपनाम है count(), वे एक ही काम करते हैं।

संपादित करें: प्रश्न के दूसरे भाग का उत्तर देना : प्रश्न में कोड की दो पंक्तियाँ वैकल्पिक विधियाँ नहीं हैं, वे अलग-अलग कार्य करती हैं। यदि मान $arr['1']सेट किया गया है, तो पहला चेक करता है, जबकि दूसरा एरे में तत्वों की संख्या लौटाता है।


8
@ एनबी: प्रश्न को संपादित किया गया था if (sizeof($arr)), प्रारंभिक कोड था , जिसका अनुवाद if (sizeof($arr) == 1)- स्पष्ट रूप से किया गया था कि यह जांच नहीं करता है कि सरणी में एक से अधिक तत्व हैं या नहीं। यह उत्तर सही है, और मुझे डाउन-वोट का कोई कारण नहीं दिखता है, इसलिए मेरा उत्थान है।
एलिक्स एक्सल

2
मैं मानता हूँ कि मैंने प्रश्न के मूल संस्करण पर एक नज़र नहीं डाली, जिसका यह उत्तर एक उत्तर है। संदर्भ अलग है, और मैं जवाब को गलत बताते हुए माफी मांगता हूं। यह गलत नहीं है, यदि आप मूल प्रश्न को देखते हैं। यह संपादित प्रश्न के लिए बुरा है।
एनबी

प्रश्न में दूसरा कोड स्निपेट यह जांच करेगा कि क्या $ गिरफ्तारी ['1'] पर मूल्य सेट है या नहीं, यह गिनती के बारे में चिंतित नहीं है। यह उत्तर में संबोधित नहीं किया गया था, बस सोचा था कि मैं इसका उल्लेख करूंगा और आशा करता हूं कि उत्तर के लेखक उत्तर को अपडेट करेंगे :)।
एंडर्स एम।

@AndersM। यह बात बताने के लिए धन्यवाद। मैंने इसे उत्तर में परिलक्षित किया है।
चिबुजो

मैं कुछ ऐसा करता हूं: <0 में सूचकांक के लिए <pre> <कोड> <3 {guard let testTop: Prediciton = topPredictions [सूचकांक] और {// आपकी डिफ़ॉल्ट वस्तु} predictionResult.append (testTop)} </ code> < / प्री> इन स्विफ्ट 4
एलेक्स 22

44

if(is_array($arr) && count($arr) > 1)

बस यह सुनिश्चित करने के लिए कि $ गिरफ्तारी वास्तव में एक सरणी है।

sizeofका एक उपनाम है count, मैं गिनती का उपयोग करना पसंद करता हूं क्योंकि:

  1. टाइप करने के लिए 1 कम वर्ण
  2. एक त्वरित नज़र में आकार का मतलब स्मृति के संदर्भ में एक सरणी का आकार हो सकता है, बहुत तकनीकी :(

@AlixAxel हम्म, लेकिन अगर $ गिरफ्तारी एक स्ट्रिंग है, तो काउंट ($ गिरफ्तारी) उस स्ट्रिंग के कैरेक्टर काउंट को फिर से लौटा देगी
एंड्रियास वोंग

नहीं, अगर $arrएक स्ट्रिंग है, तो वह वापस आ जाएगी 1
एलिक्स एक्सल

12
मैनुअल से: var में तत्वों की संख्या लौटाता है। यदि वर्जन एक सारणी या कार्यान्वित गणना योग्य अंतरफलक वाली वस्तु नहीं है, तो 1 वापस कर दिया जाएगा। एक अपवाद है, यदि var NULL है, तो 0 वापस कर दिया जाएगा
एलिक्स एक्सल

@AlixAxel ओह ठीक है ... वाह धन्यवाद, पता नहीं था कि: ओ ... किसी भी मामले में मैं बस इसे छोड़ने वाला हूँ अगर ओपी स्ट्रिंग और एरे के बीच अंतर करना चाहता है (आकार की परवाह किए बिना) इंगित करने के लिए धन्यवाद कि बाहर :)
एंड्रियास वोंग

6
if (count($arr) >= 2)
{
  // array has at least 2 elements
}

sizeof()के लिए एक उपनाम है count()। दोनों गैर-सरणियों के साथ भी काम करते हैं, लेकिन वे केवल 1 से अधिक मान लौटाएंगे यदि तर्क या तो एक सरणी या Countableवस्तु है , तो आप इस के साथ बहुत सुरक्षित हैं।


6

स्पष्ट रूप से उपयोग करना count($arr) > 1(इसके sizeofलिए सिर्फ एक उपनाम है count) सबसे अच्छा समाधान है। आपके सरणी की संरचना के आधार पर, तत्वों का टन हो सकता है लेकिन कोई $array['1']तत्व नहीं ।



6

मैं count()फ़ंक्शन को पसंद करता हूं sizeOf()क्योंकि इसके बजाय sizeOf()केवल एक उपनाम है count()और कई अन्य भाषाओं में इसका मतलब नहीं है। कई प्रोग्रामर sizeof()आवंटित स्मृति की मात्रा को वापस करने की उम्मीद करते हैं।


1
यहाँ भी समझाया गया। stackoverflow.com/questions/3974385/php-array-count-or-sizeof यह मूल्यवान है क्योंकि यह प्रश्न अब sizeofबनाम गूगल के लिए एक शीर्ष हिट हैcount
टिम ओगिल्वी

4

किसी सरणी की जाँच के लिए खाली () आकार से बेहतर है ()।

यदि सरणी में भारी मात्रा में डेटा है। सरणी के आकार को गिनने में अधिक समय लगेगा। लेकिन खाली चेक करना हमेशा आसान होता है।

//for empty
  if(!empty($array))
     echo 'Data exist';
  else 
     echo 'No data';


 //for sizeof
 if(sizeof($array)>1)
      echo 'Data exist';
 else 
    echo 'No data';

3

isset () केवल जाँचता है कि एक चर सेट है या नहीं .. क्या आकार या सरणी में कुछ भी नहीं है


2

मुझे लगता है कि $ गिरफ्तारी एक सरणी है तो यह वह है जो आप देख रहे हैं

if ( sizeof($arr) > 1) ...

1

पहली विधि if (isset($arr['1'])) एक सहयोगी सरणी पर काम नहीं करेगी।

उदाहरण के लिए, निम्न कोड प्रदर्शित करता है "नहीं, एक से अधिक नहीं।"

$arr = array(
    'a' => 'apple',
    'b' => 'banana',
);

if (isset($arr['1'])) {
    echo "Yup, more than one.";
} else {
    echo "Nope, not more than one.";
}

0

मैं अपनी सरणी को लूप करता हूं और स्विफ्ट 4/5 में तदनुसार भरा हुआ चूक प्राप्त करता हूं

   for index in 0..<3
    {
        let isIndexValid = allObjects.indices.contains(index)
        var yourObject:Class = Class()
        if isIndexValid { yourObject = allObjects[index]}
        resultArray.append(yourObject)
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.