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.
    }
} 

希望对你有所帮助。 :)