2010-12-13 6 views
8

मुझे यह देखने के लिए बड़े सरणी जांचनी चाहिए कि क्या वे 100% संख्यात्मक मान से भरे हुए हैं। मेरे दिमाग में आने का एकमात्र तरीका foreach है और फिर प्रत्येक मूल्य के लिए is_numeric है, लेकिन क्या यह सबसे तेज़ तरीका है?जांचने का सबसे तेज़ तरीका क्या है यदि किसी ऐरे में सभी मान संख्यात्मक हैं?

+2

* इस समस्या का कोई भी * समाधान सरणी मानों पर लूप होगा। चाहे आपको कोड या फ़ंक्शन में ऐसा करने की आवश्यकता हो, यह आपके लिए एक और सवाल है, लेकिन दोनों मामलों में एक लूप है। तो मुझे लगता है कि आप जो भी करते हैं उसके बावजूद प्रदर्शन काफी समान होना चाहिए। – Joey

+1

सरणी में आने से पहले मानों को मान्य करने के बारे में क्या? –

+0

यह इतना आसान नहीं है क्योंकि मान आते हैं और सरणी से यादृच्छिक तरीकों से जाते हैं और उनमें से कुछ शून्य या गलत हो सकते हैं या फिर, और फिर मुझे उनके साथ गणना करनी चाहिए, और इन गणनाओं के नतीजे शून्य हो सकते हैं सरणी में कुछ डेटा संख्यात्मक नहीं है। – rsk82

उत्तर

12

अपने सरणी संभालने एक आयामी और पूर्णांकों का ऊपर सिर्फ बनाया है:

return ctype_digit(implode('',$array)); 
+1

को मेरे वोट को पूर्ववत करना पड़ा, 'झूठा' और 'न्यूल' मान, जो 'is_numeric()' के लिए झूठी वापसी करते हैं, को 'ctype_digit()' से बचने के लिए खाली तारों के रूप में निहित किया गया है। – BoltClock

+0

@ बोल्टक्लॉक: ओपी आश्वासन देता है कि सरणी "100% संख्यात्मक मानों से भरा" – stillstanding

+1

मुझे लगता है कि समय पर इंपोड ऑपरेशन महंगा है। – rsk82

-2

तेज तरीका सिर्फ ग्रहण करने के लिए वे सभी अंकों के हैं और अपने आपरेशन के साथ जारी हो सकता है। यदि आपका ऑपरेशन बाद में विफल रहता है, तो आप जानते हैं कि कुछ संख्या नहीं है। लेकिन अगर वे वास्तव में अंक हैं ... आप ओ (0) से ज्यादा तेज नहीं हो सकते हैं!

+0

लेकिन कमजोर/ऑटोकास्टिंग के कारण कुछ गैर-संख्यात्मक मान फिसल जाएंगे। धारणा सुरक्षित नहीं है। – Umbrella

+0

इसे उत्तर के रूप में स्वीकार क्यों किया गया? यह कुछ भी जांच नहीं करता है ... –

-1

इस छोटे से समारोह के लिए मुझे

function IsNumericarr($arr){ 
    if(!is_array($arr)){ 
     return false; 
    } 
    else{ 
     foreach($arr as $ar){ 
      if(!is_numeric($ar)){ 
       return false; 
       exit; 
      } 
     } 
     return true; 
    } 
} 

लूप ठीक काम करता है

4
array_map("is_numeric", array(1,2,"3","hello")) 

Array ([0] => 1 [1] => 1 [2] => 1 [3] =>) 
0
if(array_reduce($array, function($c, $v){return $c & (int)is_numeric($v);}, 1)) 
+0

यह उत्तर स्वचालित रूप से इसकी लंबाई और सामग्री के कारण कम गुणवत्ता वाले के रूप में चिह्नित किया गया था। एक स्पष्टीकरण इस जवाब को एक स्टैक ओवरफ़्लो उत्तर की तरह बनने में मदद करेगा। – Popnoodles

2

फ़िल्टर सरणी की जरूरत है is_numeric का उपयोग कर। यदि परिणाम का आकार मूल जैसा ही है, तो सभी आइटम संख्यात्मक हैं:

$array = array(1, '2', '45'); 
if (count($array) === count(array_filter($array, 'is_numeric'))) { 
    // all numeric 
}