2013-02-12 41 views
7
$array = array(
    'vegs' => 'tomatos', 
    'cheese' => false, 
    'nuts' => 765, 
    '' => null, 
    'fruits' => 'apples' 
); 

var_dump(in_array(false, $array, true)); //returns true because there is a false value 

Làm thế nào để kiểm tra nghiêm ngặt nếu có ít nhất một NON-sai (string, đúng, int) giá trị trong mảng sử dụng in_array chỉ hoặc bất cứ điều gì nhưng không foreach?in_array kiểm tra cho các giá trị không sai

var_dump(in_array(!false, $array, true)); //this checks only for boolean true values 

var_dump(!in_array(false, $array, true)); //this returns true when all values are non-false 
+3

Tại sao giới hạn mình vào in_array() chỉ; đây là một cách sử dụng hoàn hảo cho array_reduce() –

+0

bất cứ điều gì nhưng không foreach – ihtus

Trả lời

7

giải pháp thực tế dưới đây

Chỉ cần đặt sự phủ định ở đúng vị trí:

var_dump(!in_array(false, $array, true)); 

Tất nhiên điều này cũng sẽ đúng nếu mảng không chứa yếu tố nào cả, vì vậy những gì bạn muốn là:

var_dump(!in_array(false, $array, true) && count($array)); 

Edit: quên nó, đó là câu trả lời cho "mảng chứa chỉ giá trị mà không phải là chính xác false", không phải "mảng chứa ít nhất một giá trị mà không phải là chính xác false"

thực tế giải pháp:

var_dump(
    0 < count(array_filter($array, function($value) { return $value !== false; })) 
); 

array_filter trả về một mảng với tất cả các giá trị mà là !== false, nếu nó không phải là trống rỗng, tình trạng của bạn là đúng.

Hoặc đơn giản như đề xuất trong các ý kiến:

var_dump(
    (bool) array_filter($array, function($value) { return $value !== false; }) 
); 

Tất nhiên, các diễn viên để bool cũng có thể được bỏ qua nếu sử dụng trong một khoản if.

+0

câu trả lời hay!;) – hek2mgl

+0

để rõ ràng hơn tôi đã chỉnh sửa: "Cách kiểm tra nghiêm ngặt nếu có ít nhất một giá trị NON-false (chuỗi, true, int) trong mảng". Vì vậy, với! In_array (false, $ array, true) - điều này là không thể. – ihtus

+0

điều này trả về true khi tất cả các giá trị là không sai – ihtus

0

Làm thế nào để kiểm tra nghiêm ngặt nếu có ít nhất một NON-sai (string, đúng, int) giá trị trong mảng sử dụng in_array chỉ hoặc bất cứ điều gì nhưng không foreach?

này là không thể vì:

  • String: kiểu dữ liệu này có thể chứa bất kỳ giá trị, nó không giống như boolean (đúng hoặc sai) hoặc NULL.
  • INT: giống như chuỗi, cách kiểm tra không xác định?
  • Boolean: có thể.
  • NULL: có thể.

Sau đó, không thể tìm thấy INT và STRING loại dữ liệu bằng cách sử dụng tóm tắt (int) hoặc (chuỗi)!

EDIT:

function get_type($v) 
{ 
    return(gettype($v)); 
} 

$types = array_map("get_type", $array); 

print_r($types); 

KẾT QUẢ:

Array 
(
    [vegs] => string 
    [cheese] => boolean 
    [nuts] => integer 
    [] => NULL 
    [fruits] => string 
) 
+0

Không thể với 'in_array', đúng. Nhưng đó không phải là toàn bộ câu hỏi. –

+0

Tôi sẽ làm một cái gì đó như thế này! xem cập nhật –

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