2009-08-23 13 views
21

Say mam tablicę takich jak to:liczba Liczba wartości w tablicy z danej wartości

$array = array('', '', 'other', '', 'other'); 

jaki sposób mogę policzyć liczbę z danej wartości (na przykład puste)?

I zrobić to sprawnie? (Do kilkunastu tablic z setek elementów każdy) tym przykładzie razy out (ponad 30 SEC):

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

W tym przypadku liczba pustych elementów jest 3.

+0

Rybitwy: liczba_całkowników działa, ale skrypt, który zwykle trwa 1 - 2sek., Wykonał prawie 20sek! Johnathan: array_keys nie działały dla tej konkretnej funkcji. Steve: array_reduce działa również, ale nie tak szybko, jak bym chciał. Rumianek: Po prostu zmieniając wartość $ === '' na pustą (wartość $), która okazała się najszybszą drogą do zrobienia tego. funkcja bez ($ tablica) { $ count = 0; foreach ($ tablica jako wartość $) { jeśli (pusta (wartość $)) { $ liczba ++; } } } return $ count; } – Tom

Odpowiedz

26

tylko pomysł, ty może użyć array_keys($myArray, "") przy użyciu opcjonalnego drugiego parametru, który określa wartość wyszukiwania. Następnie policz wynik.

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

Jest to doskonała alternatywa, szczególnie w przypadku wartości boolowskich. –

6

Nie wiem, czy to byłoby szybciej, ale jest to coś spróbować:

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

Można również spróbować array_reduce, z funkcją, która wystarczy policzyć wartość jesteś zainteresowany. Np

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

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

Niektóre benchmarking może powiedzieć, czy jest to szybciej niż array_count_values ​​()

-2
function arrayvaluecount($array) { 

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

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

     $counter =$counter+1; 
     } 

    } 
return $counter; 
} 
+4

Czy możesz wyjaśnić swój kod również w języku angielskim, [edytując] odpowiedź? – Ben

+2

Proszę wyjaśnić swój kod OP i przyszłym czytelnikom. –

2

używamy array_filter funkcji, aby dowiedzieć się liczbę wartości w tablicy

$array=array('','','other','','other'); 
$filled_array=array_filter($array);// will return only filled values 
$count=count($filled_array); 
echo $count;// returns array count 
-1
function countarray($array) 
{  $count=count($array);   
     return $count;   
}   
$test=$array = array('', '', 'other', '', 'other');   
echo countarray($test); 
+0

$ array = array ('', '', 'other', '', 'other'); $ filled_array = array_filter ($ array); // zwróci tylko wypełnione wartości $ count = count ($ filled_array); echo $ count; // zwraca liczbę tablic –

1

Generalnie do liczenia tylko spacji. Rzeczywiście zależy od zastosowania i prędkości. Osobiście lubię robić rzeczy w jednej linii.

Tak jak wybrano odpowiedź Ale nadal potrzebujesz linii, aby wyodrębnić dane potrzebne do innej zmiennej.

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

Lub użyj wywołania zwrotnego: count ($ x, function ($ v) {return '' === $ v;})) –

Powiązane problemy