执行存储在变量中的数组
Execute Array stored in a variable
我在变量 $stringPedidos 中存储了一个数组。我试图将此变量用作 $resp 中的数组,但它不起作用。
我正在尝试显示包含产品名称的键盘,具体取决于从数据库中提取的用户订单 ID。 $stringPedidos 变量包含使用 PHP 在 Telegram Bot 上显示键盘所需的数组。我想用$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);
}
输出:数组(数组("testProduct"),数组("testProduct2"),数组("Return↩️"))
输出是正确的,但它没有作为数组执行,因为它不起作用。
你需要做的是在最后一行之前添加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() 函数,因为它非常令人困惑,而且在您的情况下我认为您真的不需要它。
我在变量 $stringPedidos 中存储了一个数组。我试图将此变量用作 $resp 中的数组,但它不起作用。
我正在尝试显示包含产品名称的键盘,具体取决于从数据库中提取的用户订单 ID。 $stringPedidos 变量包含使用 PHP 在 Telegram Bot 上显示键盘所需的数组。我想用$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);
}
输出:数组(数组("testProduct"),数组("testProduct2"),数组("Return↩️"))
输出是正确的,但它没有作为数组执行,因为它不起作用。
你需要做的是在最后一行之前添加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() 函数,因为它非常令人困惑,而且在您的情况下我认为您真的不需要它。