检查空数组的最佳方法?

发布于 2024-09-29 02:52:43 字数 572 浏览 3 评论 0原文

如何递归地检查数组中是否有空内容,如下例所示:

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

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

        )

)

数组不为空,但没有内容。我如何用一个简单的函数来检查这个?

感谢!!

How can I check an array recursively for empty content like this example:

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

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

        )

)

The array is not empty but there is no content. How can I check this with a simple function?

Thank!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(11

┼── 2024-10-06 02:52:43

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

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;
}
苍风燃霜 2024-10-06 02:52:43

如果您的数组只有一层深,您也可以这样做:

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

在大多数情况下有效:)

If your array is only one level deep you can also do:

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

Works in most cases :)

把人绕傻吧 2024-10-06 02:52:43

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

Solution with 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;
}
拔了角的鹿 2024-10-06 02:52:43

假设数组始终包含相同类型的数据:

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

Assuming the array will always contain the same type of data:

function TestNotEmpty($arr) {
    foreach($arr as $item)
        if(isset($item->title) || isset($item->descrtiption || isset($item->price))
            return true;
    return false;
}
早茶月光 2024-10-06 02:52:43

包括短路。

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

Short circuiting included.

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;
}
野心澎湃 2024-10-06 02:52:43

这是我的版本。一旦它在数组中找到非空字符串,它就会停止。另外,它会正确检查空字符串,因此 0(零)不会被视为空字符串(如果您使用empty() 函数,则会被视为空字符串)。顺便说一句,多年来,即使仅对字符串使用此函数也已被证明是无价的。

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 ('')
}

Here's my version. Once it finds a non-empty string in an array, it stops. Plus it properly checks on empty strings, so that a 0 (zero) is not considered an empty string (which would be if you used empty() function). By the way even using this function just for strings has proven invaluable over the years.

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 ('')
}
春花秋月 2024-10-06 02:52:43

如果有人偶然发现这个问题并且需要检查整个数组是否为 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;

If anyone stumbles on this question and needs to check if the entire array is NULL, meaning that each pair in the array is equal to null, this is a handy function. You could very easily modify it to return true if any variable returns NULL as well. I needed this for a certain web form where it updated users data and it was possible for it to come through completely blank, therefor not needing to do any 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;
怕倦 2024-10-06 02:52:43
$arr=array_unique(array_values($args));
if(empty($arr[0]) && count($arr)==1){
 echo "empty array";
}
$arr=array_unique(array_values($args));
if(empty($arr[0]) && count($arr)==1){
 echo "empty array";
}
栀子花开つ 2024-10-06 02:52:43

如果传递的变量不是数组,或者任何嵌套数组包含值(包括假值!),则返回 TRUE。否则返回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;
}

Returns TRUE if passed a variable other than an array, or if any of the nested arrays contains a value (including falsy values!). Returns FALSE otherwise.
Short circuits.

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;
}
小伙你站住 2024-10-06 02:52:43

这是一个很好的实用函数,如果数组为空,则返回 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' => '',
        ),
    ),
);

You'将获得从 is_array_empty() 返回的 true 值,因为没有设置任何值:

var_dump( is_array_empty($products) );

以交互方式查看此代码:http://codepad.org/l2C0Efab

Here's a good utility function that will return true (1) if the array is empty, or false (0) if not:

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

For example, given a multidimensional array:

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

You'll get a true value returned from is_array_empty(), since there are no values set:

var_dump( is_array_empty($products) );

View this code interactively at: http://codepad.org/l2C0Efab

难理解 2024-10-06 02:52:43

我需要一个函数来递归地过滤数组中的非空值。

这是我的递归函数:

function filterArray(array $array, bool $keepNonArrayValues = false): array {
  $result = [];
  foreach ($array as $key => $value) {
    if (is_array($value)) {
      $value = $this->filterArray($value, $keepNonArrayValues);
    }

    // keep non empty values anyway
    // otherwise only if it is not an array and flag $keepNonArrayValues is TRUE 
    if (!empty($value) || (!is_array($value) && $keepNonArrayValues)) {
      $result[$key] = $value;
    }
  }

  return array_slice($result, 0)
}

使用参数 $keepNonArrayValues,您可以决定值是否为 0(数字零)、''(空字符串)或false (bool FALSE) 被保留在数组中。换句话说:如果 $keepNonArrayValues = true 则只会从目标数组中删除空数组。

array_slice($result, 0) 的作用是重新排列数字索引 (0..length-1)。

此外,通过此函数过滤数组后,可以使用 empty($filterredArray) 进行测试。

I needed a function to filter an array recursively for non empty values.

Here is my recursive function:

function filterArray(array $array, bool $keepNonArrayValues = false): array {
  $result = [];
  foreach ($array as $key => $value) {
    if (is_array($value)) {
      $value = $this->filterArray($value, $keepNonArrayValues);
    }

    // keep non empty values anyway
    // otherwise only if it is not an array and flag $keepNonArrayValues is TRUE 
    if (!empty($value) || (!is_array($value) && $keepNonArrayValues)) {
      $result[$key] = $value;
    }
  }

  return array_slice($result, 0)
}

With parameter $keepNonArrayValues you can decide if values such 0 (number zero), '' (empty string) or false (bool FALSE) shout be kept in the array. In other words: if $keepNonArrayValues = true only empty arrays will be removed from target array.

array_slice($result, 0) has the effect that numeric indices will be rearranged (0..length-1).

Additionally, after filtering the array by this function it can be tested with empty($filterredArray).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文