You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中动态生成InlineKeyboard行报错:如何批量创建合规按钮?

动态生成每行5个字母的Inline键盘行

我使用第三方包的方法添加自定义屏幕键盘行,示例代码如下:

$keyboard = InlineKeyboardMarkup::make();
$keyboard->addRow(
    InlineKeyboardButton::make('Button 1', callback_data: '1'),
    InlineKeyboardButton::make('Button 2', callback_data: '2')
);

我有一个字母数组,想要为其创建键盘按钮且每行显示5个字母,尝试了以下代码:

$letters; // ['a', 'b', 'd' ...]

$rowItems = 5;
$currentItem = 0;
$buttons = [];

for ($i = 0; $i < count($letters); $i++) {
  if ($currentItem === $rowItems || $i === (count($letters) - 1)) {
    $keyboard->addRow((object)$buttons);
    $buttons = [];
    $currentItem = 0;
  } else {
    $buttons[] = InlineKeyboardButton::make($letters[$i], callback_data: $letters[$i]);
    $currentItem++;
  }
}

但运行报错,提示找不到InlineKeyboardButton对象的预期属性。请问如何实现与示例格式一致的动态行生成?


问题原因
你的代码存在两个核心问题:

  1. addRow方法需要接收多个InlineKeyboardButton实例作为独立参数,但你将按钮数组强制转为对象传入,不符合方法的参数要求;
  2. 循环判断逻辑错误,最后一个元素的处理会漏掉部分按钮,还会错误触发行添加逻辑。

正确实现方式
使用array_chunk函数将字母数组分割为每组5个元素的子数组,再遍历每个子数组生成按钮行,逻辑简洁且符合第三方包的调用规范:

$letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']; // 示例字母数组
$keyboard = InlineKeyboardMarkup::make();

// 将原数组分割为每行最多5个元素的二维数组
$letterRows = array_chunk($letters, 5);

foreach ($letterRows as $rowLetters) {
    $rowButtons = [];
    foreach ($rowLetters as $letter) {
        $rowButtons[] = InlineKeyboardButton::make($letter, callback_data: $letter);
    }
    // 使用展开运算符将按钮数组转为独立参数传入addRow
    $keyboard->addRow(...$rowButtons);
}

更简洁的写法(结合array_map):

$letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'];
$keyboard = InlineKeyboardMarkup::make();

foreach (array_chunk($letters, 5) as $rowLetters) {
    $keyboard->addRow(
        ...array_map(fn($letter) => InlineKeyboardButton::make($letter, callback_data: $letter), $rowLetters)
    );
}

关键说明

  • array_chunk($letters, 5):自动将原数组分割为每个子数组最多含5个元素的二维数组,无需手动处理最后一行元素不足5个的情况;
  • ...$rowButtons:PHP的展开运算符,将数组中的每个元素作为独立参数传入addRow,和手动编写多个InlineKeyboardButton::make()的调用格式完全一致。

内容的提问来源于stack exchange,提问作者Cornel Verster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:43:10