Php ForEach只执行一次任务
我有一个数组,它是从twitter API检索到的一些数据的json_解码。Php ForEach只执行一次任务,php,arrays,twitter,foreach,Php,Arrays,Twitter,Foreach,我有一个数组,它是从twitter API检索到的一些数据的json_解码。 以下是我正在使用的数组的部分: Array( [0]=>stdClass Object ( [user] => stdClass Object ( [screen_name] => User1 ) [text] => Text of message [id] => 220301332135952
以下是我正在使用的数组的部分:
Array(
[0]=>stdClass Object (
[user] => stdClass Object (
[screen_name] => User1
)
[text] => Text of message
[id] => 220301332135952385
[created_at] => Tue Jul 03 23:41:45 +0000 2012
)
[1]=>stdClass Object (
[user] => stdClass Object (
[screen_name] => User2
)
[text] => Text of message
[id] => 220301332135952385
[created_at] => Tue Jul 03 23:41:45 +0000 2012
)
)
我遇到的问题是,我的PHP只从中获取User1
和消息文本的值。我的实际数组要长得多,但它遵循上述模式。
以下是我的PHP:
foreach($tweet as $num => $val) {
$username = $tweet[$num]->user->screen_name;
echo $num . "-USER-" . $username . "-NAME ";
$tweet = $tweet[$num]->text;
$id = $tweet[$num]->id_str;
$year = substr($tweet[$num]->created_at, -4);
$statement = $connect->prepare("INSERT INTO table (username, tweet, id, year) VALUES ('$username', '$tweet', '$id', '$year')");
$statement->execute();
}
$tweet
是我的数组。里面的echo
是我用来调试的东西。它输出:
1-USER-User1-NAME 2-USER--NAME 3-USER--NAME
我期待着:
1-USER-User1-NAME 2-USER-User2-NAME
最后,我的数据库只接收用户名列中的User1
,以及tweet列中的消息文本。不会在id或年份中插入任何内容。尽管如此,它还是会在第一条tweet之后为每条tweet创建空行。不知道我做错了什么。任何帮助都将不胜感激。谢谢 如果您尚未解决此问题,下面是发生的情况:
在foreach
循环的第三行,您正在替换$tweet
的值,这就是为什么您在数据库中只看到第一个用户的用户名和tweet
。您没有获得“id”和“year”的原因是tweet
之后现在变成了$tweet[$num]->text
,这是一个字符串
另一个问题是在您的$id=$tweet[$num]->id\u str
中。由于上述原因,这无论如何都不起作用,但一旦解决了上述问题,$id
仍将为空
请尝试以下操作:
foreach($tweet as $num => $val) {
$username = $tweet[$num]->user->screen_name;
echo $num . "-USER-" . $username . "-NAME ";
$user_tweet = $tweet[$num]->text; // Use $user_tweet = ... instead of $tweet = ...
$id = $tweet[$num]->id; // Replace $id_str with $id
$year = substr($tweet[$num]->created_at, -4);
$statement = $connect->prepare("INSERT INTO table (username, tweet, id, year) VALUES ('$username', '$user_tweet', '$id', '$year')");
$statement->execute();
}
我不知道你为什么选择使用$tweet[$num]
而不是$val
另外,为了在代码中充分利用准备好的语句,建议使用准备好的参数化查询,如下所示(以下是原因“”):
尝试调试,删除foreach循环中的所有内容,并测试foreach在另一个foreach中的print_r($tweet)@FaceOfJock。我在第一个foreach中有一个打印。我这么说是因为你的$tweet大小为3,而你只显示了2个对象的数组,所以可能你在第二个foreach中有问题,请尝试添加另一个打印并向我显示结果,谢谢。我没有意识到我两次使用$tweet作为变量。非常感谢!
$statement = $connect->prepare("INSERT INTO table (username, tweet, id, year) VALUES (:username, :user_tweet, :id, :year)");
$statement->bindParam(':username', $username);
$statement->bindParam(':user_tweet', $user_tweet);
$statement->bindParam(':id', $id);
$statement->bindParam(':year', $year);
$statement->execute();