可以';t用PHP中的一个函数从数组中回显单个值


Can't echo single value from array with a function in PHP

我在PHP方面遇到了问题,因为我用MySQL查询的结果填充数组。

问题是,当我制作一个函数来回显数组的某个元素时,它不起作用,因为没有函数就没有错误。

建立连接,执行查询,将结果存储在变量中:

require_once("db.php");
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
$query = "SELECT * FROM arlista";
$query_result = mysqli_query($conn, $query);
mysqli_close($conn);
$result_array = array();

我将查询结果传递给一个数组,然后我想从该数组中查询一个值。问题是,如果我使用这样的函数,这将不起作用。我无法在浏览器中显示数组的元素。

function arlista($attr, $rownum){
    while($row = mysqli_fetch_array($query_result)){
        $result_array[$i] = $row[$attr];
        $i++;
    }
    echo $result_array[$rownum];
}
arlista("ar",1);

但是,如果我不使用函数,这是有效的。浏览器正在显示该值。

while($row = mysqli_fetch_array($query_result)){
$result_array[$i] = $row["ar"];
$i++;
}
echo $result_array[1];

有人能解释一下这个函数出了什么问题吗?或者我该如何修复它?非常感谢。

服务器正在运行PHP 5.6.9

检查变量范围。您的函数没有变量$query_result。打开错误报告也会向您发出有关该问题的通知。

使用全局将起作用:

function arlista($attr, $rownum){
    global $query_result, $result_array;
    while($row = mysqli_fetch_array($query_result)){
        $result_array[$i] = $row[$attr];
        $i++;
    }
    echo $result_array[$rownum];
}
arlista("ar",1);

希望能有所帮助!

函数不会引入您尚未在函数内部定义或传入的变量。由于您没有定义或传入$query_result和$result_array,脚本将无法工作。但是,如果没有函数,则会定义该变量,因此脚本可以工作。要使函数工作,您所需要做的就是传入变量$query_result、$result_array或在函数中定义它。

编辑:正如Adam所说,您可以在函数中定义,将其用作全局变量:全局$query_result,$result_array;

您需要将$query_result作为参数传递给函数。您还应该初始化您在函数中使用的变量。但实际上并不需要$i变量,因为您可以使用[]将新元素推送到数组中。

function arlista($attr, $rownum, $query_result){
    $result_array = array();
    while($row = mysqli_fetch_array($query_result)){
        $result_array[] = $row[$attr];
    }
    echo $result_array[$rownum];
}
arlista("ar", 1, $query_result);

您也可以使用global $query_result,但显式参数通常是更好的编程风格。

您需要将$query_result作为函数参数传递,或者将其定义为函数中的全局变量。