PHP For 循环似乎不起作用
PHP For Loop Does Not Seem To Be Working
我正在制作一个控制面板来使用 Telegram Bot API & PHP 来管理我的 Telegram Bot。
基本上,我想在一个小聊天框中显示单个用户的每条消息。
因为可能有更多用户向机器人发送消息,我必须检查发件人的 user_id 是否没有重复并再次重复,然后为新发件人创建一个新的聊天框。
为了做到这一点,我获取了 result
中的数组数量并执行了以下操作:
PRIVATE CODE
正如您在代码开头看到的那样,我创建了变量 store_id 来保存第一个 sender_id,如果再次重复此 sender_id,则继续使用 for循环直到$i小于$num.
但问题是它根本不显示任何内容。我的意思是没有错误也没有结果!
这是怎么回事,我该怎么办?
更新:
PRIVATE CODE
但结果又是:
问题是因为你首先要分配
$sender_id = $updateArray["result"][$i]["message"]["from"]["id"];
那么你正在分配
$store_id = $sender_id;
意味着 $store_id
将具有 $sender_id
的确切内容
那么你正在检查
if($sender_id == $store_id)
这将永远是真实的并且循环每次都得到 continue
。
这就是为什么屏幕上没有显示任何内容,这不是语法错误。
您忘记在 $store_id
中分配正确的 store_id。
希望对你有所帮助。祝你好运。
为什么要比较 sender_id 和 store_id。为了进行比较,它们应该来自不同的来源,然后您将检查它们是否相等。您应该有一种方法来检查 sender_id 是否已经是他们的。您可以创建一个数组,然后将 sender_id 存储在数组中,但在分配之前,您将检查 sender_id 不应已存在于数组中。如果存在则继续。
$sender_ids = array();
for($i=0;$i<$num;$i++)
{
$sender_id = $updateArray["result"][$i]["message"]["from"]["id"];
if(!(in_array($sender_ids, $sender_ids)))
{
$sender_ids[] = $sender_id;
echo ' CHAT BOX ';
}
else
{
continue;
}
}
不太清楚你想要实现什么,但我想下面的代码可以做到:
$updateArray = json_decode($update, TRUE);
// Initialize $store_id with a value that doesn't appear in the input data
$store_id = NULL;
// foreach is better that for(;;) to iterate over collections
foreach ($updateArray["result"] as $item) {
// Get the sender of the current item
$sender_id = $item["message"]["from"]["id"];
// Use strict comparison to make sure it doesn't match when it shouldn't
// (f.e. if `$sender_id` is the empty string it is == to NULL but not ===)
if ($sender_id === $store_id) {
// It is the same sender as of the previous message; skip this message
continue;
} else {
// This is a new sender; process it...
echo ' CHAT BOX ';
// ... and remember it for the next items
$store_id = $sender_id;
}
}
问题是因为您只检查发件人是否已经存在或者是新发件人。如果它是新的,那么您将 sender_id 添加到数组并打印聊天框。如果它是一个已经存在的发件人,那么您什么都不做并继续。
表示您正在跳过为其 ID 已存在于数组中的发件人打印消息。
所以现在不要像
那样继续使用 array_search()
$sender_ids = array();
for($i=0;$i<$num;$i++)
{
$sender_id = $updateArray["result"][$i]["message"]["from"]["id"];
if(!(in_array($sender_ids, $sender_ids)))
{
$sender_ids[] = $sender_id;
echo ' CHAT BOX ';
}
else
{
$key = array_search($sender_ids, $sender_ids);
// here this $key will be now same for all the messages from same sender id.
// and you can make logic to group them.
}
}
希望对你有所帮助。 :)
我正在制作一个控制面板来使用 Telegram Bot API & PHP 来管理我的 Telegram Bot。
基本上,我想在一个小聊天框中显示单个用户的每条消息。
因为可能有更多用户向机器人发送消息,我必须检查发件人的 user_id 是否没有重复并再次重复,然后为新发件人创建一个新的聊天框。
为了做到这一点,我获取了 result
中的数组数量并执行了以下操作:
PRIVATE CODE
正如您在代码开头看到的那样,我创建了变量 store_id 来保存第一个 sender_id,如果再次重复此 sender_id,则继续使用 for循环直到$i小于$num.
但问题是它根本不显示任何内容。我的意思是没有错误也没有结果!
这是怎么回事,我该怎么办?
更新:
PRIVATE CODE
但结果又是:
问题是因为你首先要分配
$sender_id = $updateArray["result"][$i]["message"]["from"]["id"];
那么你正在分配
$store_id = $sender_id;
意味着 $store_id
将具有 $sender_id
那么你正在检查
if($sender_id == $store_id)
这将永远是真实的并且循环每次都得到 continue
。
这就是为什么屏幕上没有显示任何内容,这不是语法错误。
您忘记在 $store_id
中分配正确的 store_id。
希望对你有所帮助。祝你好运。
为什么要比较 sender_id 和 store_id。为了进行比较,它们应该来自不同的来源,然后您将检查它们是否相等。您应该有一种方法来检查 sender_id 是否已经是他们的。您可以创建一个数组,然后将 sender_id 存储在数组中,但在分配之前,您将检查 sender_id 不应已存在于数组中。如果存在则继续。
$sender_ids = array();
for($i=0;$i<$num;$i++)
{
$sender_id = $updateArray["result"][$i]["message"]["from"]["id"];
if(!(in_array($sender_ids, $sender_ids)))
{
$sender_ids[] = $sender_id;
echo ' CHAT BOX ';
}
else
{
continue;
}
}
不太清楚你想要实现什么,但我想下面的代码可以做到:
$updateArray = json_decode($update, TRUE);
// Initialize $store_id with a value that doesn't appear in the input data
$store_id = NULL;
// foreach is better that for(;;) to iterate over collections
foreach ($updateArray["result"] as $item) {
// Get the sender of the current item
$sender_id = $item["message"]["from"]["id"];
// Use strict comparison to make sure it doesn't match when it shouldn't
// (f.e. if `$sender_id` is the empty string it is == to NULL but not ===)
if ($sender_id === $store_id) {
// It is the same sender as of the previous message; skip this message
continue;
} else {
// This is a new sender; process it...
echo ' CHAT BOX ';
// ... and remember it for the next items
$store_id = $sender_id;
}
}
问题是因为您只检查发件人是否已经存在或者是新发件人。如果它是新的,那么您将 sender_id 添加到数组并打印聊天框。如果它是一个已经存在的发件人,那么您什么都不做并继续。
表示您正在跳过为其 ID 已存在于数组中的发件人打印消息。
所以现在不要像
那样继续使用 array_search()$sender_ids = array();
for($i=0;$i<$num;$i++)
{
$sender_id = $updateArray["result"][$i]["message"]["from"]["id"];
if(!(in_array($sender_ids, $sender_ids)))
{
$sender_ids[] = $sender_id;
echo ' CHAT BOX ';
}
else
{
$key = array_search($sender_ids, $sender_ids);
// here this $key will be now same for all the messages from same sender id.
// and you can make logic to group them.
}
}
希望对你有所帮助。 :)