@alekssamos
Программист любитель

Как задать клавиатуру из массива?

Во второй версии библиотеки irazasyed/telegram-bot-sdk клавиатура делалась простой передачей массива
$keyboard = [
	['q', 'w', 'e'],
	['a', 's', 'd']
];

В 3 версии эту штуку убрали,теперь там по-другому:
use Telegram\Bot\Keyboard\Keyboard;
$keyboard = Keyboard::make()
->setOneTimeKeyboard(false)->setResizeKeyboard(true)
->row('q', 'w', 'e')
->row('a', 's', 'd');

И вроде бы всё хорошо, но как такую конструкцию загнать в цикл foreach?
Раньше - передал массив и всё.
А сейчас? Такой метод (из массива убрали / я не нашёл).
Сделал такой "г*внокод", но он, естественно, не работает и это уже совсем не то, что бы хотелось, кастыли какие-то...
$items = [
'qqq', 'www', 'eee',
'rrr', 'ttt', 'yyy',
'uuu', 'iii', 'ooo'
];

$sCode = trim('use Telegram\Bot\Keyboard\Keyboard;

$keyboardforeach = Keyboard::make()
->setOneTimeKeyboard(false)->setResizeKeyboard(true)
');
$j=0;
$limit=3;
foreach($items as $item){
	if($limit==$j){
		$sCode[strlen($sCode)-1] = ')';
		$sCode .= ')';
		$j=0;
	} if ($j==0) {
		$sCode .= '->row(';
	}
	$j++;
	$sCode .= "<<<'EOF'\n{$item}\nEOF\n,";
}
$sCode .= ';';

eval($sCode);

Есть ли решение для новой версии этой библиотеки?
  • Вопрос задан
  • 466 просмотров
Решения вопроса 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
use Telegram\Bot\Keyboard\Keyboard;
$buttons = [
    ['qqq', 'www', 'eee'],
    ['rrr', 'ttt', 'yyy'],
    ['uuu', 'iii', 'ooo'],
];

$keyboard = Keyboard::make()->setOneTimeKeyboard(false)->setResizeKeyboard(true);
foreach($buttons as $row)
{
    $keyboard->row(...$row);
}

обратите внимание на ТРОЕТОЧИЕ перед $row - https://wiki.php.net/rfc/argument_unpacking
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы