Как я могу создать вложенный массив в foreach l oop, чтобы получить тот же результат? Telegram PHP Bot - PullRequest
0 голосов
/ 20 апреля 2020

Этот фрагмент кода:

$inline_keyboard = new InlineKeyboard([
    ['text' => 'valueA', 'callback_data' => 'valueA'],
], [
    ['text' => 'valueB', 'callback_data' => 'valueB'],
]);

создает в моем боте-телеграмме следующую встроенную клавиатуру:

telegram output

Пока что хорошо ... Но вместо жесткого кодирования значений я хочу получить тот же вывод со значениями из массива (запрос к базе данных).

Я пробовал что-то вроде этого:

$dbValues = array("valueA", "valueB");

foreach ($dbValues as $value)
{
    $inline_keyboard .= new InlineKeyboard([
        ['text' => "$value", 'callback_data' => "$value"],
    ]);
}

Но это терпит неудачу ... Я думаю, потому что мне не нужно запускать "новый" экземпляр в каждой итерации?

Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Вы не можете объединить объект как строку. Вы можете go по-другому, построить массив и после отправки массива на InlineKeyboard

$dbValues = array("valueA", "valueB");
foreach ($dbValues as $value)
{
    $inline_keyboard[] = [['text' => "$value", 'callback_data' => "$value"]];
}

$inline_keyboard = new InlineKeyboard(...$inline_keyboard);

Подробнее см. "Новая структура клавиатуры и как передать динамические c аргументы" из php -telegram-bot wiki.

0 голосов
/ 23 апреля 2020

Чтобы получить горизонтальную клавиатуру, вы можете использовать этот фрагмент кода:

$dbValues = array("valueA", "valueB");
foreach ($dbValues as $value)
{
    $inline_keyboard[] = ['text' => "$value", 'callback_data' => "$value"];
}

$inline_keyboard = new InlineKeyboard($inline_keyboard);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...