2010-10-25 33 views
13

Làm thế nào tôi có thể kiểm tra một mảng đệ quy cho nội dung trống như ví dụ sau:cách tốt nhất để kiểm tra một mảng trống?

Array 
(
    [product_data] => Array 
     (
      [0] => Array 
       (
        [title] => 
        [description] => 
        [price] => 
       ) 

     ) 
    [product_data] => Array 
     (
      [1] => Array 
       (
        [title] => 
        [description] => 
        [price] => 
       ) 

     ) 

) 

Mảng là không có sản phẩm nào nhưng không có nội dung. Làm thế nào tôi có thể kiểm tra điều này với một chức năng đơn giản?

Cảm ơn !!

+6

Tại sao mảng của bạn có hai phím giống hệt 'product_data'? – codaddict

+0

@codaddict: Quan sát tốt. –

+0

xin lỗi tôi chỉ sao chép văn bản ví dụ :-) – comod

Trả lời

15

function is_array_empty($InputVariable) 
{ 
    $Result = true; 

    if (is_array($InputVariable) && count($InputVariable) > 0) 
    { 
     foreach ($InputVariable as $Value) 
     { 
     $Result = $Result && is_array_empty($Value); 
     } 
    } 
    else 
    { 
     $Result = empty($InputVariable); 
    } 

    return $Result; 
} 
+0

Một giải pháp tổng quát hơn và lỗi khoan dung hơn tôi :), nhưng bạn có thể không ngắn mạch nó và trả lại ngay lập tức trên một câu trả lời không có sản phẩm nào thay vì tiếp tục kiểm tra phần còn lại của mảng? –

+2

foreach ($ InputVariable là $ Value) – comod

+0

@David Martensson: Việc thực hiện sẽ chỉ được chuyển đến câu lệnh khác nếu biến được gán cho hàm không phải là mảng. Hãy suy nghĩ về mảng được đưa ra trong câu hỏi dưới dạng cây và khối khác là trường hợp cơ sở mà tất cả các lá sẽ được đánh giá bởi. – emurano

2

Giả sử mảng sẽ luôn chứa cùng một loại dữ liệu:

function TestNotEmpty($arr) { 
    foreach($arr as $item) 
     if(isset($item->title) || isset($item->descrtiption || isset($item->price)) 
      return true; 
    return false; 
} 
2

mạch ngắn bao gồm.

function hasValues($input, $deepCheck = true) { 
    foreach($input as $value) { 
     if(is_array($value) && $deepCheck) { 
      if($this->hasValues($value, $deepCheck)) 
       return true; 
     } 
     elseif(!empty($value) && !is_array($value)) 
      return true; 
    } 
    return false; 
} 
2

Đây là phiên bản của tôi. Một khi nó tìm thấy một chuỗi không trống trong một mảng, nó dừng lại. Thêm vào đó nó kiểm tra đúng các chuỗi rỗng, sao cho 0 (không) không được coi là một chuỗi rỗng (sẽ là nếu bạn sử dụng hàm rỗng()). Bằng cách này, ngay cả khi sử dụng chức năng này chỉ cho các chuỗi đã được chứng minh vô giá trong những năm qua.

function isEmpty($stringOrArray) { 
    if(is_array($stringOrArray)) { 
     foreach($stringOrArray as $value) { 
      if(!isEmpty($value)) { 
       return false; 
      } 
     } 
     return true; 
    } 

    return !strlen($stringOrArray); // this properly checks on empty string ('') 
} 
8

Nếu mảng của bạn là chỉ có một mức độ sâu sắc bạn cũng có thể làm:

if (strlen(implode('', $array)) == 0) 

trình trong hầu hết các trường hợp :)

+0

Nó không phải. Làm thế nào về mảng đa chiều? – sonnb

+2

@sonnb: Bạn phải đọc kỹ: Một cấp độ! = Đa chiều/đa cấp. – velop

0

Nếu bất cứ ai tình cờ về câu hỏi này và cần phải kiểm tra xem toàn bộ mảng là NULL, có nghĩa là mỗi cặp trong mảng bằng null, đây là một hàm tiện dụng. Bạn có thể dễ dàng sửa đổi nó để trả về true nếu bất kỳ biến nào trả về NULL. Tôi cần điều này cho một mẫu web nhất định nơi nó cập nhật dữ liệu người dùng và nó có thể cho nó đi qua hoàn toàn trống rỗng, do đó không cần phải làm bất kỳ SQL.

$test_ary = array("1"=>NULL, "2"=>NULL, "3"=>NULL); 

function array_empty($ary, $full_null=false){ 
    $null_count = 0; 
    $ary_count = count($ary); 

    foreach($ary as $value){ 
     if($value == NULL){ 
      $null_count++; 
     } 
    } 

    if($full_null == true){ 
     if($null_count == $ary_count){ 
      return true; 
     }else{ 
      return false; 
     } 
    }else{ 
     if($null_count > 0){ 
      return true; 
     }else{ 
      return false; 
     } 
    } 
} 

$test = array_empty($test_ary, $full_null=true); 
echo $test; 
7

Giải pháp với array_walk_recursive:

function empty_recursive($value) 
{ 
     if (is_array($value)) { 
       $empty = TRUE; 
       array_walk_recursive($value, function($item) use (&$empty) { 
         $empty = $empty && empty($item); 
       }); 
     } else { 
       $empty = empty($value); 
     } 
     return $empty; 
} 
+0

Thiết lập thanh lịch nhất trong số các câu trả lời. – chikamichi

0
$arr=array_unique(array_values($args)); 
if(empty($arr[0]) && count($arr)==1){ 
echo "empty array"; 
} 
0

Returns TRUE nếu được thông qua một biến khác hơn là một mảng, hoặc nếu bất kỳ của các mảng lồng chứa một giá trị (bao gồm cả giá trị falsy!). Trả về FALSE nếu không. Mạch ngắn.

function has_values($var) { 
    if (is_array($var)) { 
    if (empty($var)) return FALSE; 
    foreach ($var as $val) { 
     if(has_values($val)) return TRUE; 
    } 
    return FALSE; 
    } 
    return TRUE; 
} 
0

Dưới đây là một chức năng tốt tiện ích đó sẽ trở lại true (1) nếu mảng rỗng, hoặc false (0) nếu không muốn nói:

function is_array_empty($mixed) { 
    if (is_array($mixed)) { 
     foreach ($mixed as $value) { 
      if (! is_array_empty($value)) { 
       return false; 
      } 
     } 
    } elseif (! empty($mixed)) { 
     return false; 
    } 

    return true; 
} 

Ví dụ, đưa ra một mảng đa chiều:

$products = array(
    'product_data' => array(
     0 => array(
      'title' => '', 
      'description' => null, 
      'price' => '', 
     ), 
    ), 
); 

Bạn sẽ nhận được giá trị true được trả về từ is_array_empty() vì không có giá trị nào được đặt:

var_dump(is_array_empty($products)); 

Xem mã này tương tác tại địa chỉ: http://codepad.org/l2C0Efab

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