Выполнить массив, хранящийся в переменной - PullRequest
0 голосов
/ 10 апреля 2020

Я сохранил массив в переменной $ stringPedidos . Я пытаюсь использовать эту переменную как массив в $ resp , но она не работает.

Я пытаюсь отобразить клавиатуру, которая содержит названия продуктов в зависимости от идентификатора заказа пользователя извлечено из БД. Переменная $ stringPedidos содержит массив, необходимый для отображения клавиатуры в Telegram Bot с использованием PHP. Я хочу использовать $ stringPedidos в качестве массива, проблема в том, что $ stringPedidos выполняется в виде строки.

$query = mysqli_query($conn, "SELECT * FROM pedidos WHERE usuario_id='".$id."'");

      if(mysqli_num_rows($query) > 0){

        $stringPedidos= "array(";

        $query = "SELECT producto_id FROM pedidos WHERE usuario_id='".$id."'";
        $result = mysqli_query($conn, $query) or die(mysqli_error($conn));
        while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
            $producto_id = $row['producto_id'];

                 $queryProductos = "SELECT name FROM productos WHERE id='".$producto_id."'";
                    $resultProductos = mysqli_query($conn, $queryProductos) or die(mysqli_error($conn));
                    while ($rowProductos = mysqli_fetch_array($resultProductos, MYSQLI_BOTH)) {
                        $productoName = $rowProductos["name"];
                          $stringPedidos .= 'array("'.$productoName.'"),';


                                      }

        }

        $stringPedidos .= 'array("Return↩️")';
        $stringPedidos .= ")";


    $resp = array("keyboard" => eval($stringPedidos),"resize_keyboard" => true,"one_time_keyboard" => true,"remove_keyboard" => true);

}

Вывод: array (array ("testProduct"), array ("testProduct2"), array ("Return↩️"))

Вывод правильный, но он не выполняется как массив, потому что он не работает.

1 Ответ

4 голосов
/ 10 апреля 2020

Что вам нужно сделать, это добавить eval("\$newStringPedidos = $stringPedidos;"); перед последней строкой. Это сохранит ваш массив в новой переменной $newStringPedidos. Теперь переменная $newStringPedidos на самом деле является массивом, а не строкой, поэтому вы можете использовать ее в последней строке, и она будет работать.

eval("\$newStringPedidos = $stringPedidos;");
$resp = array("keyboard" => $newStringPedidos,"resize_keyboard" => true,"one_time_keyboard" => true,"remove_keyboard" => true);

Проблема в том, что вы используете функцию eval () неправильно. Посетите https://www.w3schools.com/pHP/func_misc_eval.asp

Кроме того, обычно гораздо лучше избегать использования функции eval (), поскольку она довольно запутанная, и в вашем случае, я думаю, она вам действительно не нужна.

...