检查数组是否为空

时间:2011-10-18 13:04:00

标签: php arrays

********更新**********

var_dump: string(0)“”

我正在尝试检查数组的一部分是否为空,然后显示代码,但无论如何都会显示代码。

我试过了!is_null !empty。我不确定哪个应该是正确的,还是应该使用: if (sizeof($book['Booking']['comments'])>0)

代码:

<?php if (!empty($book['Booking']['comments'])) {?>
    <table width="100%" border="0">
        <tbody>
            <tr>
                <td style="font-family:'Lucida Grande', sans-serif;font-size:12px;font-weight:normal;color:#666666;">
                    <?=$book['Booking']['comments']?>
                </td>
            </tr>
        </tbody>
    </table>
<? } ?>

阵列:

Array
(
[Booking] => Array
    (
        [id] => 109
        [user_id] => 1
        [corporate_account_id] => 0
        [id_ref] => RES000109
        [price] => 178.00
        [arrival] => 2011-10-18 00:00:00
        [departure] => 2011-10-19 00:00:00
        [rate_title] => 
        [adult_guests] => 4
        [child_guests] => 0
        [company] => gravitate
        [titlename] => 
        [firstname] => John
        [surname] => Doe
        [address1] => 123 Fake St
        [address2] => 
        [city] => New York
        [state] => NY
        [postcode] => 12345
        [country] => US
        [phone] => 1111111111
        [mobile] => 
        [fax] => 
        [email] => example@example.com
        [comments] => 
        [created] => 2011-10-18 13:40:47
        [updated] => 2011-10-18 13:40:47
        [status] => 1
        [cancelled] => 0
        [request_src] => website
        [request_token] => 0
        [token] => ayzrGnx
        [survey_sent] => 0000-00-00 00:00:00
        [survey_returned] => 0000-00-00 00:00:00
        [send_sms] => 0
        [payment_time] => 0000-00-00 00:00:00
        [fullname] =>  John Doe
    )

10 个答案:

答案 0 :(得分:8)

我怀疑它可能包含(bool) FALSE,而is_null()则不然。

尝试简单:

if ($book['Booking']['comments']) {

这也适用于评估为FALSE的任何内容,就像空字符串一样。

答案 1 :(得分:3)

你的问题过于本地化了。你的代码中有一些拼写错误。

您的案例if (!empty($var))if ($var)绝对存在无差异。因此,if ($book['Booking']['comments']) {有效,您的if (!empty($book['Booking']['comments']))也没有问题。所以,问题根本就没有了。

所有这些试图回答这个非实际问题的答案都是无稽之谈。

唯一的问题可能是jotorres1提到的空格符号,但你已经说过没有了。

答案 2 :(得分:2)

if (count($book['Booking']['comments']) > 0) { ... }

答案 3 :(得分:2)

!empty($var)count($var) > 0!$var,所有这些都适用于大多数情况。当给定的变量/数组键不存在时,empty()具有不抛出通知的“优点”,但如果您不必担心布尔检查(!$var)应该足够(参见here哪些类型转换为FALSE)。它也恰好是代码中最短的。

答案 4 :(得分:1)

在这种情况下,我认为$book['Booking']['comments']甚至不是数组。所以你可以使用strlen http://php.net/manual/en/function.strlen.php

<?php if (strlen($book['Booking']['comments'])) {?>

答案 5 :(得分:1)

您可能希望trim()该属性在测试之前移除任何空格,如果它是empty()

编辑:我假设它是一个字符串。它看起来不像是一个空数组。

答案 6 :(得分:1)

这不是一个肯定的数组。

执行var_dump($book["Booking"]["comments"])以相应地检查数据类型

答案 7 :(得分:1)

我认为您可以尝试使用以下逻辑,并尝试使其更简单一些。

<?php 
    // Only change this
    // and leave everything else as is
    $book_comment = $book['Booking']['comments'];
    $book_comment = trim($book_comment);
    // The reason I use empty trim, is to take 
    // away any space.  
    // In the output, use the original $book['Booking']['comments']

    if(!empty($book_comment)):?>

      <table width="100%" border="0">
          <tbody>
              <tr>
                  <td style="font-family:'Lucida Grande', sans-serif;font-size:12px;font-weight:normal;color:#666666;">
                      <?=$book['Booking']['comments']?>
                  </td>
              </tr>
          </tbody>
       </table>
<?php endif;?>

我没有对此进行测试,因为我现在不能,但希望这对你有所帮助。

答案 8 :(得分:0)

  1. 空数组:

    $array = array();

    reset($array)返回FALSE

  2. 填充数组:

    $array = array('foo', 'bar');

    reset($array)返回第一个元素('foo')。

答案 9 :(得分:0)

如果你想确定你正在测试的变量是否实际上是一个非空数组,你可以使用这样的东西:

if ($book['Booking']['comments'] !== array()) {
  //your logic goes here
  ....................
}

这种逻辑比其他解决方案更快。它也将保持编码标准。