2010-12-13 40 views
8

Tôi phải kiểm tra các mảng lớn để xem chúng có được lấp đầy 100% các giá trị số không. Cách duy nhất đến với tâm trí của tôi là foreach và sau đó là số cho mọi giá trị, nhưng đó là cách nhanh nhất?Cách nhanh nhất để kiểm tra xem tất cả các giá trị trong một mảng có phải là số không?

+2

* Mọi giải pháp cho vấn đề này sẽ lặp lại các giá trị mảng. Cho dù bạn cần phải làm điều đó trong mã hoặc một chức năng làm điều đó cho bạn là một câu hỏi khác, nhưng trong cả hai trường hợp có một vòng lặp. Vì vậy, tôi đoán hiệu suất nên được khá nhiều như nhau, bất kể những gì bạn làm. – Joey

+1

Điều gì về việc xác thực giá trị trước khi chúng vào mảng? –

+0

Nó không đơn giản vì các giá trị đi vào và đi từ mảng theo cách ngẫu nhiên và một số có thể là rỗng hoặc sai hoặc "", và sau đó tôi phải thực hiện các phép tính với chúng và kết quả của các phép tính này phải là null nếu một số dữ liệu trong mảng không phải là số. – rsk82

Trả lời

12

giả sử mảng của bạn là một chiều và chỉ tạo thành từ số nguyên:

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

Đã phải hoàn tác phiếu bầu của tôi, các giá trị 'false' và' NULL', trả về false cho 'is_numeric()' được gọi là chuỗi trống ở đây, thoát 'ctype_digit()'. – BoltClock

+0

@BoltClock: OP đảm bảo mảng là "100% được lấp đầy với các giá trị số" – stillstanding

+1

Tôi nghĩ rằng hoạt động implode là khá tốn kém trong thời gian. – rsk82

-2

Cách nhanh nhất có thể là để chỉ cho rằng họ đang tất cả các chữ số và tiếp tục với hoạt động của bạn. Nếu hoạt động của bạn không hoạt động sau đó, thì bạn biết điều gì đó không phải là một chữ số. Nhưng nếu chúng thực sự là chữ số ... bạn không thể nhanh hơn O (0)!

+0

Nhưng một số giá trị không phải số sẽ trượt qua vì việc đánh số/tự động hóa. Giả định không an toàn. – Umbrella

+0

Tại sao điều này được chấp nhận làm câu trả lời? Nó không kiểm tra bất cứ điều gì ... –

-1

chức năng nhỏ này hoạt động tốt đối với tôi

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

Vòng cần

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

Câu trả lời này được tự động gắn cờ là chất lượng thấp vì độ dài và nội dung của nó. Một lời giải thích sẽ giúp câu trả lời này trở nên giống như một câu trả lời Stack Overflow. – Popnoodles

2

Lọc mảng bằng cách sử dụng is_numeric. Nếu kích thước của kết quả giống với bản gốc, thì tất cả các mục đều là số:

$array = array(1, '2', '45'); 
if (count($array) === count(array_filter($array, 'is_numeric'))) { 
    // all numeric 
} 
Các vấn đề liên quan