2009-08-23 40 views
21

böyle bir dizi var ki?Count sayısı

Ve verimli bir şekilde mi yapıyorsunuz? dışarı Bu örnek süreleri (30 sn) (elementlerin yüzlerce her biri yaklaşık bir düzine diziler için): Bu durumda

function without($array) { 
    $counter = 0; 
    for($i = 0, $e = count($array); $i < $e; $i++) { 
     if(empty($array[$i])) { 
      $counter += 1; 
     } 
    } 
    return $counter; 
} 

boş elemanların sayısı, 3.

+0

Cellfish: array_count_values ​​çalışır, ancak normalde 1 - 2 saniye sürecek olan betik yaklaşık 20 saniye sürdü! Johnathan: array_keys bu özel işlev için çalışmadı. Steve: array_reduce da çalışır, ancak istediğim kadar hızlı değil. Papatya: Sadece bunu yapmak için en hızlı yol olduğu ortaya çıkarılan $ value === '' değerini boşa ($ value) değiştirerek. fonksiyonu olmadan ($ dizi) { $ count = 0; foreach ($ dizi olarak $ değer) { if (boş ($ değer)) { $ count ++; } } dönüş $ count; } – Tom

cevap

26

Sadece bir fikirdir Bir arama değerini belirten isteğe bağlı ikinci parametreyi kullanarak array_keys($myArray, "") kullanabilir. Ardından sonucu sayın.

$myArray = array("","","other","","other"); 
$length = count(array_keys($myArray, "")); 
+0

Bu özellikle, boole değerleri ile uğraşırken harika bir alternatiftir. –

6

bu hızlı olacaktır eğer bilmiyorum ama denemek için bir şey:

$counter = 0; 
foreach($array as $value) 
{ 
    if($value === '') 
    $counter++; 
} 
echo $counter; 
3

Ayrıca sadece ilgilendiğiniz saymasını verecek bir işlevle, array_reduce deneyebilirsiniz. Örn

function is_empty($v, $w) 
{ return empty($w) ? ($v + 1) : $v; } 

array_reduce($array, 'is_empty', 0); 

bu array_count_values ​​()

-2
function arrayvaluecount($array) { 

    $counter = 0; 
    foreach($array as $val){ 

     list($v)=$val; 
     if($v){ 

     $counter =$counter+1; 
     } 

    } 
return $counter; 
} 
daha hızlıdır Bazı kıyaslama söyleyebilir
+4

Kodunuzu İngilizce olarak açıklayabilir misiniz? – Ben

+2

Lütfen kodunuzu OP'ye ve gelecekteki okuyucular için açıklayın. –

2

Biz dizide

$array=array('','','other','','other'); 
$filled_array=array_filter($array);// will return only filled values 
$count=count($filled_array); 
echo $count;// returns array count 
-1
değerlerin sayısını bulmak için array_filter işlevini kullanın
+0

$ array = array ('', '', 'other', '', 'other'); $ filled_array = array_filter ($ dizi); // yalnızca dolu değerleri döndürecektir $ count = count ($ filled_array); echo $ count; // dizi sayımını döndürür –

1

Genellikle yalnızca boşlukları saymak içindir. Gerçekten kullanım durumunda ve gereken hıza bağlıdır. Şahsen bir şeyleri yapmayı seviyorum.

Seçilen yanıt gibi Ama yine de başka bir değişken için gerekli olan verileri ayıklamak için bir hatta ihtiyacınız var.

$r = count($x) - count(array_filter($x)); 
+0

Veya geri arama özelliğini kullanın: sayımı (array_filter ($ x, function ($ v) {return '' === $ v;})) –