2010-10-25 111 views
13

我如何递归查询的数组,像这样的例子空内容:检查空数组的最佳方法是什么?

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

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

     ) 

) 

的数组不为空,但没有内容。我怎样才能用一个简单的函数来检查它呢?

谢谢!

+6

为什么你的阵列有两个相同的密钥'product_data'? – codaddict 2010-10-25 12:08:59

+0

@codaddict:好的观察。 – 2010-10-25 12:11:58

+0

对不起,我只复制文本,例如:-) – comod 2010-10-25 12:41:25

回答

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

比我的更一般和容错的解决方案:),但是你能不能将它短路并立即返回一个非空的答案,而不是继续测试数组的其余部分? – 2010-10-25 12:30:37

+2

foreach($ InputVariable as $ Value) – comod 2010-10-25 12:39:41

+0

@David Martensson:如果赋给该函数的变量不是数组,则执行只会被路由到那个else语句。将问题中给出的数组看作一棵树,将else块作为所有叶子将被评估的基本情况。 – emurano 2010-10-25 21:53:35

2

假设阵列将总是包含相同类型的数据:

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

短路包括在内。

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

这是我的版本。一旦在数组中找到非空字符串,它就会停止。此外,它正确地检查空字符串,以便0(零)不被视为空字符串(如果您使用了空函数)。顺便说一下,即使对于字符串使用这个函数也证明了这些年来无法估量的价值。

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

如果阵列中只有一个级别深,你也可以这样做:

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

作品在大多数情况下:)

+0

它不是。多维数组如何? – sonnb 2012-08-08 17:29:07

+2

@sonnb:你必须仔细阅读:一个层次!=多维/多层次。 – velop 2013-11-11 09:48:59

0

如果有人跌倒在这个问题上,需要检查整个array是NULL,意味着数组中的每一对都等于null,这是一个方便的函数。如果任何变量返回NULL,你可以很容易地修改它以返回true。我需要一个特定的Web表单来更新用户数据,并且可能会完全空白,因此不需要执行任何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

解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

答案中最优雅的设置。 – chikamichi 2014-06-17 12:20:00

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

返回TRUE如果传递比阵列的其他变量,或者如果任何嵌套阵列包含一个值(包括falsy值!)。否则返回FALSE。 短路。

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

这里有一个很好的效用函数将返回true (1)如果数组是空的,或者false (0)如果不是:给

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; 
} 

例如,多维数组:

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

你'trueis_array_empty()返回的值,因为没有设置值:

var_dump(is_array_empty($products)); 

查看该代码交互的:http://codepad.org/l2C0Efab

相关问题