2009-08-23 6 views
21

내가이 같은 배열을 말해봐?카운트 수는

그리고 효율적으로 수행 할 수 있습니까? 밖으로 이 예제 시간 (30 초) (수백 개의 요소 각각에 대한 다스 배열에 대한) :이 경우

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

빈 요소의 수는 당신이, 3

+0

Cellfish : array_count_values가 작동하지만 일반적으로 1 - 2 초가 걸리는 스크립트는 거의 20 초 걸립니다! Johnathan :이 특정 기능에 대해 array_keys가 작동하지 않았습니다. 스티브 : array_reduce도 작동하지만 내가 원하는 것만 큼 빠르지는 않습니다. Camomile : 간단히 말해서 $ value === ''를 빈 ($ value)으로 바꾸면 가장 빠른 방법입니다. 없이 ($ 배열) { $ count = 0; foreach ($ array as $ array) { if (empty ($ value)) { $ count ++; } } return $ count; } – Tom

답변

26

그냥 생각입니다 검색 값을 지정하는 선택적인 두 번째 매개 변수를 사용하여 array_keys($myArray, "")을 사용할 수 있습니다. 그런 다음 결과를 계산하십시오.

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

이것은 특히 부울 값을 처리하는 경우 좋은 대안입니다. –

6

이 빨리 될 경우 내가 아는 해달라고하지만이 시도하는 뭔가 :

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

당신은 또한 당신이 관심있는 값을 계산 것 기능, array_reduce을 시도 할 수 있습니다. 예를 들어

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

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

이 array_count_values ​​()

-2
function arrayvaluecount($array) { 

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

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

     $counter =$counter+1; 
     } 

    } 
return $counter; 
} 
보다 빠른 경우 일부 벤치마킹를 알 수 있습니다
+4

답변을 편집하여 코드를 영어로 설명 할 수 있습니까? – Ben

+2

OP와 향후 독자를 위해 코드를 설명하십시오. –

2

우리는 배열

$array=array('','','other','','other'); 
$filled_array=array_filter($array);// will return only filled values 
$count=count($filled_array); 
echo $count;// returns array count 
-1
의 값의 수를 알아 array_filter 기능을 사용하여
+0

$ array = array ('', '', 'other', '', 'other'); $ filled_array = array_filter ($ array); // 채워진 값만 반환합니다. $ count = count ($ filled_array); echo $ count; // 배열 수를 반환합니다. –

1

일반적으로 공란만을 계산합니다. 실제로 사용 사례와 필요한 속도에 달려 있습니다. 개인적으로 나는 한 줄씩하는 것을 좋아합니다.

그러나 선택한 응답을 좋아하지만 다른 변수에 필요한 데이터를 추출하려면 여전히 회선이 필요합니다.

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

또는 콜백을 사용하십시오 : count (array_filter ($ x, function ($ v) {return ''=== $ v;}))) –