还记得阵列怎麽赋值吗,Day15 - 基础(4):阵列处理、JSON
我们先来复习一下,我把 a, b, c 三个键分别设定成 air, bag, cat
$array = [];
$array['a'] = 'air';
$array['b'] = 'bag';
$array['c'] = 'cat';
print_r($array);
// [a] => air
// [b] => bag
// [c] => cat
然後我再把 a 设定成 apple,air 就自动消失了
$array['a'] = 'apple';
print_r($array);
// [a] => apple
// [b] => bag
// [c] => cat
你应该想到了吧,如果把人当成键、选择的选项当成值的话
$array = [
// 人 => 选项
];
$array['阿明'] = 'a';
$array['小美'] = 'b';
$array['昊昊'] = 'c';
print_r($array);
// [阿明] => a
// [小美] => b
// [昊昊] => c
昊昊改成选择 a,完全不需要做新增移除的动作,直接赋值就行了
$array['昊昊'] = 'a';
print_r($array);
// [阿明] => a
// [小美] => b
// [昊昊] => a
如果反过来选项当成键、人当成值的话就会变成二维阵列,而且还要做新增移除,明显麻烦了许多
先来执行程序看看按钮会回传什麽,方便用来找值在阵列的哪里
来到 processCallbackQuery()
,将 $msg_id
$chat_id
$user_id
找出来,还有加上三个 if 来处理 data
接着就是用刚刚学到的阵列特性,$path
则是决定资料要放的地方,因为会有很多个频道,频道里又有很多则讯息,所以就用了 $chat_id
和 $msg_id
当作路径和档名
突然觉得同样的东西要写三遍,这样不太对,我可是超懒的,怎麽可以写三遍呢,所以这边要改一下,把 callback_data
前面加上 channel_post
之後这边改一下,当啷~变成只剩一个 if
如果档案已经存在的话,就把档案读取出来,然後用阵列的特性修改资料,最後再存回去,不然的话就新增一个阵列还有存进一个新档案
至於为何选择用 fopen
,这是因为如果有两个人同时按了按钮,此时有可能会只存到一个人的资料,导致另一个人按了按钮结果资料被吃掉,详细情况可以复习一下这篇文章 Day16 - 基础(5):档案读取与写入、cURL
接着要来计算同一个选项总共被选择了几次,先将初始值设成 0,然後用 foreach
把阵列里的值一个个拿出来看,如果符合条件就 +1,没有的话就加 +0,这边是利用了 PHP 自动转型的特性
最後用三元运算子整理一下,如果次数是 0 就改成空字串,不然就是在前面加一个空白
别忘了更新按钮的文字,把刚刚计算的数字加上去
这样就完成啦,计得重新执行程序後要重发一则讯息,因为我们把 callback_data
改了嘛
最後的最後再考考你,如果要能够收回的话应该怎麽做呢?
辛苦又充实的 30 天终於结束啦,我已经等不急每天看动画看到爽了,借的书也是一整个月都没时间翻开,终於能回到我优闲慢活的人生,真是感动
最後来套句六角学院的老话,如果做不出来的话「可以参考答案」:
https://github.com/miku3920/ironman2021_by_miku3920_bot
这只机器人我已经放上服务器 24 小时运行中,欢迎拿来使用看看,如果还有想加的功能也欢迎发 PR 或 issue
>>: [C 语言笔记--Day27] 6.S081 Lab syscall: Sysinfo ( II )
Kubernetes 元件介绍 在了解K8s的功能後,我们就要来了解K8s是使用那些元件来管理容器,...
随着 Component Driven 兴起,元件化变为不可逆的趋势,在元件化後的可替换性与重复利用...
在学习React的表单时势必先了解什么是 React的受控组件(controlled compone...
在flow那篇我们了解到flow的特性,尤其是每次collect都会创建新的实例,但在某些use c...
我们到政府开放资料平台下载这两个档案,第一个是包含各种伴手礼的经纬度资料、名称、介绍等等作为要画在地...