检查PHP数组是否为空?

时间:2016-09-18 05:22:51

标签: php arrays

我正在使用如下的php数组:

echo '<pre>', print_r($empData[$employee]['banks']).'</pre>';
Array
(
    [0] => Array
        (
            [bank_name] =>  []
            [bank_code] => 
            [branch] => 
            [account_number] => 
            [account_type] => 
        )

)

现在我需要检查一下,这个bank array是否为空。这意味着所有索引都应该有一个值。

这是我尝试的方式:

$proceed = false;
foreach ($empData[$employee]['banks'] as $key) { 

  echo '<pre>', print_r($key).'</pre>';

  foreach ($key as $k => $v) {                              
    if (empty($empData[$employee]['banks'][$k])){ 
      $proceed = true; 
      break; 
    }                            
  }
}

if(!$proceed) {
  echo 'This array is empty';
}
else {
  echo 'This array is not empty';
}

但是,它不适合我。它总是会转向其他部分,即使数组不为空。

更新:

$proceed = false;
foreach ($empData[$employee]['banks'] as $bank) {
  if (!array_filter($bank)) {
      $proceed = true; 
      break; 
  }
}

if($proceed) {
echo 'This array is empty';
}
else {
echo 'This array is not empty';
}

Array1:它不是空的。但输出结果为Its not empty。好吧

This array is not empty

Array
(
    [0] => Array
        (
            [bank_name] => Bank Name
            [bank_code] => 7083
            [branch] => Branch Name
            [account_number] => 234234324242
            [account_type] => NRFC
        )

)

Array2:它是空的。但输出结果为Its not empty。所以错了

This array is not empty

Array
(
    [0] => Array
        (
            [bank_name] =>  []
            [bank_code] => 
            [branch] => 
            [account_number] => 
            [account_type] => 
        )

)

希望有人可以帮助我。

6 个答案:

答案 0 :(得分:1)

修改

您的问题已更新几次。看起来您可能想要将$bank视为&#34;空&#34;如果一个值未填充 - 如果所有值与函数匹配,则我的原始答案(下方)将仅返回true。我们需要适应这一点的功能略有不同,array_some

function array_some(callable $f, array $xs) {
  foreach (array_values($xs) as $x)
    if (call_user_func($f, $x))
      return true;
  return false;
}

$input = [
  [
    'bank_name' => [],
    'bank_code' => null,
    'branch' => null,
    'account_number' => null,
    'accout_type' => null
  ],
  [
    'bank_name' => ['foobar'],
    'bank_code' => 123,
    'branch' => null,
    'account_number' => null,
    'accout_type' => null
  ],
  [
    'bank_name' => 'Bank Name',
    'bank_code' => 7083,
    'branch' => 'Branch Name',
    'account_number' => '234234324242',
    'accout_type' => 'NRFC'
  ]
];

function is_empty($x) { return empty($x); }

foreach ($input as $bank) {
  $proceed = array_some('is_empty', $bank);
  echo 'proceed:', json_encode($proceed), PHP_EOL;
}

// proceed:true
// proceed:true
// proceed:false
  • 在第一个示例中,部分字段为空,因此$proceed将为true
  • 在第二个示例中,部分字段为空,因此$proceed将为true
  • 在第三个示例中,所有字段均为非空,因此$proceed将为false

https://repl.it/DcCW

原始答案:

您正在寻找的是array_every功能。让我们从一个简单的例子开始:

function array_every(callable $f, array $xs) {
  foreach (array_values($xs) as $x)
    if (!call_user_func($f, $x))
      return false;
  return true;
}

function even($x) { return $x % 2 === 0; }

echo "even:", json_encode(array_every('even', [1,2,3])), PHP_EOL; // false
echo "even:", json_encode(array_every('even', [2,4,6])), PHP_EOL; // true

https://repl.it/DcCZ

  • 在第一个示例中,123 不是所有even,因此输出为<强>假

  • 在第二个示例中,246 全部为even,因此输出为

现在让我们看看你的数据

function array_every(callable $f, array $xs) {
  foreach (array_values($xs) as $x)
    if (!call_user_func($f, $x))
      return false;
  return true;
}

$input = [
  [
    'bank_name' => [],
    'bank_code' => null,
    'branch' => null,
    'account_number' => null,
    'accout_type' => null
  ],
  [
    'bank_name' => ['foobar'],
    'bank_code' => 123,
    'branch' => null,
    'account_number' => null,
    'accout_type' => null
  ]
];

function is_empty($x) { return empty($x); }

foreach ($input as $bank) {
  $proceed = array_every('is_empty', $bank);
  echo 'proceed:', json_encode($proceed), PHP_EOL;
}

// proceed:true
// proceed:false

https://repl.it/DcCX

  • 在第一个示例数据中,所有数组值为empty,因此$proceed将为true

    < / LI>
  • 在第二个示例中,某些值为(非empty),因此$proceed将为false

  

注意:由于empty is a language construct and not a function,因此无法使用变量函数调用它。 - 这就是为什么我定义了一个可重用的is_empty函数,而不是使用array_every('empty', ...) - 这不起作用。

答案 1 :(得分:0)

您无需再运行额外的循环。如果要检查库数组中的所有字段是否为空,请使用array_filter()函数。

  

array_filter()迭代数组中的每个值,并将它们传递给回调函数。

     

如果回调函数返回true,则将数组中的当前值返回到结果数组中。数组键被保留。

foreach ($empData[$employee]['banks'] as $bank) {
    if (!array_filter($bank)) {
        $proceed = true; 
        break; 
    }
}

答案 2 :(得分:0)

nstore(\$hash, "$temp_dir/temp_file");

答案 3 :(得分:0)

您可以使用 array_walk_recursive

  

将用户定义的回调函数应用于每个元素   阵列。此函数将递归到更深的数组中。   注意:

  • 如果回调需要使用数组的实际值, 指定回调的第一个参数作为参考。然后,任何 对这些元素所做的更改将在原始数组中进行 本身。

您还可以使用或不空数组

查看演示here

请参阅修改**demo2 **

CODE:

<div class="carousel-inner" role="listbox">

  <div class="item active">
    <img src="http://i0.wp.com/www.cattywampur.com/wp-content/uploads/2016/03/8566819595_0f567e8594_k.jpg">
    <div class="carousel-caption">
      <h3>Traversing the Grand Canyon</h3>
    </div>
  </div>

  <div class="item">
    <img src="http://i2.wp.com/www.cattywampur.com/wp-content/uploads/2016/05/26300985983_713ab03dc1_k.jpg">
    <div class="carousel-caption">
      <h3>San Jacinto - Deer Springs Trail</h3>
    </div>
  </div>

</div>

答案 4 :(得分:-1)

对于EMPTY数组:

Array ( [Tags] => SimpleXMLElement Object ( [0] => ) )

非空:

Array ( [Tags] => SimpleXMLElement Object ( [0] =>,[1] => "s" ) )

答案 5 :(得分:-1)

$proceed = false;
foreach ($empData[$employee]['banks'] as $key) { 

  echo '<pre>', print_r($key).'</pre>';

  foreach ($key as $k => $v) {                              
    if (!empty($empData[$employee]['banks'][$k])){ 

     $proceed = true; 
    }  else{
    $proceed = false; 
    break;
    }              
  }
}

if($proceed) { 
  echo 'This array is empty';
}
else {
  echo 'This array is not empty';
}

检查一下,可能对你有帮助。