PHP For循环似乎不起作用
我正在制作一个控制面板来管理我的电报机器人使用电报机器人API和PHP 基本上,我希望在一个小的聊天框中显示单个用户的每条消息 因为可能有更多的用户向Bot发送了消息,所以我必须检查发送者的用户id是否重复,然后为新发送者创建一个新的聊天框 为此,我获取了PHP For循环似乎不起作用,php,telegram,telegram-bot,php-telegram-bot,Php,Telegram,Telegram Bot,Php Telegram Bot,我正在制作一个控制面板来管理我的电报机器人使用电报机器人API和PHP 基本上,我希望在一个小的聊天框中显示单个用户的每条消息 因为可能有更多的用户向Bot发送了消息,所以我必须检查发送者的用户id是否重复,然后为新发送者创建一个新的聊天框 为此,我获取了结果中的数组数,并执行了以下操作: PRIVATE CODE 正如您在代码开头看到的,我使用变量store_id来保存第一个发送者_id,如果再次重复此发送者_id,则继续for循环,直到$I小于$num 但问题是它根本没有显示任何东西。我的
结果中的数组数
,并执行了以下操作:
PRIVATE CODE
正如您在代码开头看到的,我使用变量store_id来保存第一个发送者_id,如果再次重复此发送者_id,则继续for循环,直到$I小于$num
但问题是它根本没有显示任何东西。我的意思是没有错误也没有结果
这里出了什么问题,我该怎么办
更新:
PRIVATE CODE
但结果是:
问题是因为首先要分配
$sender_id = $updateArray["result"][$i]["message"]["from"]["id"];
$store_id = $sender_id;
那么你是在分配
$sender_id = $updateArray["result"][$i]["message"]["from"]["id"];
$store_id = $sender_id;
表示$store\u id
的确切内容为$sender\u id
那你是在检查
if($sender_id == $store_id)
这将始终是真的,循环每次都得到continue
这就是为什么屏幕上没有显示任何内容,也不是语法错误
您忘记在$store\u id
中分配正确的store\u id
希望我能帮助你。祝你好运。为什么要比较发送者id和商店id。为了进行比较,它们应该来自不同的来源,然后你会检查它们是否相等。应该有一种方法可以检查发送者的id是否已经是他们的。您可以创建一个数组,然后继续在数组中存储发送者id,但在分配之前,您将检查该发送者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;
}
}
$sender_id=array();
对于($i=0;$i您想要实现什么还不是很清楚,但我想下面的代码可以实现这一点:
$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;
}
}
问题是因为您只检查发件人是否已存在或是否为新发件人。如果为新发件人,则将发件人id添加到数组并打印聊天框。如果为现有发件人,则不执行任何操作并继续
表示您正在跳过为其id已存在于数组中的发件人打印消息
因此,现在不要继续使用数组_search(),如
$sender_id=array();
对于($i=0;$i“$store\u id=$sender\u id;if($sender\u id==$store\u id){
”--你看不出这个代码有什么问题吗?另外,关闭for
块的花括号不见了,但我猜它放在你发布的代码后面。你说看不到任何问题是什么意思?
?什么时候$sender\u id会不等于$store\u id?嗯,你可能不能,这就是你来这里的原因。我想这是ob显然,如果在第一条语句中将$sender\u id
的值复制到$store\u id
中,它们是相等的,if
表达式在第二条语句中的计算结果总是TRUE
。那么,你认为什么是合理的呢?很好,但现在我得到了以下错误:注意:使用未定义的constant haystack-假设“haystack”
&在数组()中预期参数2为数组,给定字符串
我已更新了代码。使用if(!(在数组中($sender\u id,$sender\u id)))将数组名称放在haystack的位置,即$sender\u id在数组()中haystack的位置写入$sender\u id。这将修复您的错误。答案只是一个起点(或指向正确的方向)。用它来解决您眼前的问题,并进行研究,以使其适应您的需要并改进您的代码。您不能指望我(或其他人)来帮助您修复你的代码。如果我这么做,那么它就不再是你的代码了,不是吗?@GauravKumar谢谢你的努力,我更新了关于你答案的问题,请查看更新2更好的答案,但它显示了每条消息的所有框,并且不介意If($sender\u id===$store\u id){//它与上一封邮件的发件人相同;跳过此邮件继续;}
condition!!!我在更新的问题中发布了一张关于新结果的图片…请查看。