set数组没有计数元素

时间:2013-07-16 02:56:47

标签: php arrays pdo

今天刚开始学习PDO,并且正在使用PHP / MySQL学习Twitter克隆。

这是一段代码片段,它应该在某个user_id下显示数据库中的所有推文(类似于twitter提要)。

<?php
$all_tweets = showtweets($pdo, $_SESSION['user_id']);
if (count($all_tweets)) {
    foreach($all_tweets as $key => $value) {
?>

<div class="tweet">
    <?php
         echo $key['tweet'] . "<br> 
         Written By: " . $_SESSION['user_id'] . " on " . $key['time'] . "<br>";
    ?>
</div>

<?php
    };
} else {
    echo "You haven't posted anything yet!";
};
?>

这是我的PHP代码中的showtweets函数

function showtweets($pdo, $user_id) {
    $show_tweets_stmt = "SELECT tweet, time FROM tweets WHERE id=:user_id 
                         ORDER BY time DESC";
    $show_tweets = $pdo->prepare($show_tweets_stmt);
    $show_tweets->bindParam(':user_id', $_SESSION['user_id']);
    $show_tweets_execute = $show_tweets->execute();

    if (!$show_tweets_execute) {
        printf("Tweets failed to be retrieved! <br> %s", $pdo->error);
    } else {
        $tweets_array = $show_tweets->fetchAll();
        return $tweets_array; 
    };
}

我尝试运行isset($all_tweets)并返回true,而回显count($all_tweets)则显示为0.

我认为我的addtweets功能代码出了问题,我整天都在讨论这个问题,但是我无法让它工作。

有什么建议吗?非常感谢

2 个答案:

答案 0 :(得分:1)

来自PHP,isset

  

如果var存在并且其值不是NULL,则返回TRUE,FALSE   否则。

因此,在您的情况下,变量$all_tweets 已设置,且值不为NULL。

更具体地说,您的问题在于如何确定数组是否为空。 要确定PHP中的$all_tweetsempty - 互联网,以及(主要)很多StackOverflow帖子强烈建议使用empty(),(来自PHP文档):

  

如果var存在并且具有非空的非零值,则返回FALSE。   否则返回TRUE。

     

以下内容被认为是空的:

     
      
  • “”(空字符串)
  •   
  • 0 (0为整数)
  •   
  • 0.0 (0作为浮动)
  •   
  • “0”(0为字符串)
  •   
  • NULL
  •   
  • FALSE
  •   
  • array()(空数组)
  •   
  • $ var; (声明的变量,但没有值)
  •   

此外,有关此问题的更多阅读,请检查: How to check whether an array is empty using PHP?

答案 1 :(得分:0)

如果要查看数组是否为空,请使用empty($array) isset($array)返回true,因为存在空数组。