Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP For循环似乎不起作用_Php_Telegram_Telegram Bot_Php Telegram Bot - Fatal编程技术网

PHP For循环似乎不起作用

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 但问题是它根本没有显示任何东西。我的

我正在制作一个控制面板来管理我的电报机器人使用电报机器人API和PHP

基本上,我希望在一个小的聊天框中显示单个用户的每条消息

因为可能有更多的用户向Bot发送了消息,所以我必须检查发送者的用户id是否重复,然后为新发送者创建一个新的聊天框

为此,我获取了
结果中的数组数
,并执行了以下操作:

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!!!我在更新的问题中发布了一张关于新结果的图片…请查看。