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

PHP中向json编码的inline_keyboard数组循环追加元素的实现方法

实现方案

你需要先把inline_keyboard的数组结构单独声明,不要直接写在json_encode返回语句中,就可以通过循环灵活追加元素了。
inline_keyboard的结构规则为:外层数组每一个元素代表一行,每一行的数组内的元素代表当前行的按钮。

可自定义追加按钮的通用实现

function retIKey($text, $callback, $extraButtons = []) {
    // 初始化基础键盘结构,第一行默认放传入的按钮
    $keyboardData = [
        'inline_keyboard' => [
            [
                ['text' => $text, 'callback_data' => $callback]
            ]
        ]
    ];

    foreach ($extraButtons as $btn) {
        // 配置is_new_line为true则新建一行放按钮,否则追加到当前最后一行
        if (!empty($btn['is_new_line'])) {
            $keyboardData['inline_keyboard'][] = [
                ['text' => $btn['text'], 'callback_data' => $btn['callback_data']]
            ];
        } else {
            $lastLine = count($keyboardData['inline_keyboard']) - 1;
            $keyboardData['inline_keyboard'][$lastLine][] = [
                'text' => $btn['text'],
                'callback_data' => $btn['callback_data']
            ];
        }
    }

    return json_encode($keyboardData);
}
调用示例(生成你给出的目标结构)
$appendBtns = [
    ['text' => 'sql1', 'callback_data' => 'sql2', 'is_new_line' => false],
    ['text' => 'sql2', 'callback_data' => 'sal2', 'is_new_line' => true]
];
$result = retIKey('你的默认文本', '你的默认回调', $appendBtns);

固定规则循环的简化实现

如果你的追加按钮逻辑是固定的,不需要外部传参,可以直接把循环写在函数内部:

function retIKey($text, $callback) {
    $keyboardData = [
        'inline_keyboard' => [
            [
                ['text' => $text, 'callback_data' => $callback]
            ]
        ]
    ];

    // 你的按钮数据源,可替换为自己的业务数据
    $btnSource = [
        ['text' => 'sql1', 'callback' => 'sql2'],
        ['text' => 'sql2', 'callback' => 'sal2']
    ];

    foreach ($btnSource as $index => $item) {
        if ($index === 0) {
            // 第一个追加按钮和默认按钮同处一行
            $keyboardData['inline_keyboard'][0][] = [
                'text' => $item['text'],
                'callback_data' => $item['callback']
            ];
        } else {
            // 后续按钮单独占一行
            $keyboardData['inline_keyboard'][] = [
                ['text' => $item['text'], 'callback_data' => $item['callback']]
            ];
        }
    }

    return json_encode($keyboardData);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:54:04