2010-12-13 14 views
8

Ich muss große Arrays überprüfen, um zu sehen, ob sie zu 100% mit numerischen Werten gefüllt sind. Der einzige Weg, der mir in den Sinn kommt, ist foreach und dann is_numeric für jeden Wert, aber ist das der schnellste Weg?Was ist der schnellste Weg zu prüfen, ob alle Werte in einem Array numerisch sind?

+2

* Jede * Lösung für dieses Problem wird die Array-Werte durchlaufen. Ob Sie es in Code oder einer Funktion tun müssen, ist für Sie eine andere Frage, aber in beiden Fällen gibt es eine Schleife. Also denke ich, dass die Performance ziemlich gleich sein sollte, egal was du tust. – Joey

+1

Was ist mit der Validierung der Werte, bevor sie in das Array gelangen? –

+0

Es ist nicht so einfach, weil die Werte in das Array kommen und aus dem Array auf zufällige Weise gehen und einige von ihnen können Null oder falsch oder "", und dann muss ich Berechnungen mit ihnen durchführen, und das Ergebnis dieser Berechnungen muss null sein, wenn Einige der Daten im Array sind nicht numerisch. – rsk82

Antwort

12

Ihren Array unter der Annahme, eindimensional und nur aus den ganzen Zahlen:

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

Ich musste meine Vote rückgängig machen, 'false' und' NULL' Werte, die false für 'is_numeric()' zurückgeben, werden hier als leere Strings implodiert, indem 'ctype_digit()' entkommt. – BoltClock

+0

@BoltClock: OP versichert das Array ist "100% mit numerischen Werten gefüllt" – stillstanding

+1

Ich denke, implode Operation ist ziemlich teuer in der Zeit. – rsk82

-2

Der schnellste Weg sein könnte, um nur sie alle Zahlen sind übernehmen und mit dem Betrieb fortsetzen. Wenn Ihre Operation später fehlschlägt, dann wissen Sie, dass etwas keine Ziffer ist. Aber wenn sie alle tatsächlich Ziffern sind ... kann man nicht viel schneller als O (0) kommen!

+0

Aber einige nicht-numerische Werte werden wegen des schwachen Typing/autocasting durchgehen. Die Annahme ist nicht sicher. – Umbrella

+0

Warum wurde das als Antwort akzeptiert? Es überprüft nichts ... –

-1

Diese kleine Funktion funktioniert für mich

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

Loop-Fein ist

benötigt
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

Diese Antwort wurde aufgrund ihrer Länge und ihres Inhalts automatisch als minderwertig gekennzeichnet. Eine Erklärung würde dazu beitragen, dass diese Antwort eher wie eine Stack-Overflow-Antwort aussieht. – Popnoodles

2

Filter das Array mit is_numeric. Wenn die Größe des Ergebnisses identisch mit dem Original ist, sind alle Elemente numerisch:

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