2013-05-07 31 views
7

Tôi có một mảng liên kết trong đó tôi cần đếm số lượng giá trị đúng của boolean bên trong.Số lượng PHP Số giá trị thực trong một mảng Boolean

Kết quả cuối cùng là tạo câu lệnh if trong đó sẽ trả về true khi chỉ có một giá trị thực tồn tại trong mảng. Nó sẽ cần trả về false nếu có nhiều giá trị đúng hơn trong mảng, hoặc nếu không có giá trị đúng trong mảng.

Tôi biết tuyến đường tốt nhất sẽ là sử dụng tính và in_array dưới một số hình thức. Tôi không chắc chắn điều này sẽ làm việc, chỉ cần ra khỏi đỉnh đầu của tôi, nhưng ngay cả khi nó không, đây có phải là cách tốt nhất?

$array(a->true,b->false,c->true)  

if (count(in_array(true,$array,true)) == 1) 
{ 
    return true 
} 
else 
{ 
    return false 
} 

Trả lời

26

Tôi sẽ sử dụng array_filter.

$array = array(true, true, false, false); 
echo count(array_filter($array)); 
//outputs: 2 

http://codepad.viper-7.com/ntmPVY

Array_filter sẽ loại bỏ các giá trị mà là sai-y (giá trị == false). Sau đó, chỉ nhận được một số. Nếu bạn cần lọc dựa trên một số giá trị đặc biệt, như nếu bạn đang tìm kiếm một giá trị cụ thể, array_filter chấp nhận tham số thứ hai tùy chọn là hàm mà bạn có thể xác định để trả về giá trị là đúng (không được lọc) hay sai).

+0

Hoàn hảo, chính xác những gì tôi cần, Cảm ơn! – ThatTechGuy

0

như thế này?

$trues = 0; 
foreach((array)$array as $arr) { 
    $trues += ($arr ? 1 : 0); 
} 
return ($trues==1); 
2

Hãy thử phương pháp này:

<?php 
$array = array(1, "hello", 1, "world", "hello"); 
print_r(array_count_values($array)); 
?> 

Kết quả:

Array 
(
    [1] => 2 
    [hello] => 2 
    [world] => 1 
) 

Documentation

+1

Điều này làm việc cho chuỗi/số nguyên, tuy nhiên họ đang tìm kiếm các giá trị boolean. Vì vậy, điều này sẽ ném một E_WARNING cho mỗi phần tử không phải là một chuỗi/int. Ví dụ: http://codepad.viper-7.com/zPTF0U –

0

Bạn đã cố gắng sử dụng array_count_values để có được một mảng với tất cả mọi thứ tính? Sau đó kiểm tra xem có bao nhiêu sự thật?

+0

Điều này sẽ không hoạt động đối với các giá trị boolean, chỉ chuỗi và số nguyên. – Mark

7

Kể từ TRUE được đúc 1 và FALSE được đúc để 0. Bạn cũng có thể sử dụng array_sum

$array = array('a'=>true,'b'=>false,'c'=>true); 
if(array_sum($array) == 1) { 
    //one and only one true in the array 
} 

Từ doc: "FALSE sẽ mang lại 0 (zero), và TRUE sẽ mang 1 (một) . "

+0

Điều này cũng đã hoạt động tốt, cảm ơn bạn đã cung cấp! – ThatTechGuy

+1

Đây thực sự là một giải pháp khá thông minh. Thanh danh! – lgomezma

Các vấn đề liên quan