Can';t使用PHP中的函数从数组中回显单个值

Can';t使用PHP中的函数从数组中回显单个值,php,mysql,arrays,echo,Php,Mysql,Arrays,Echo,我在使用PHP时遇到了问题,我用MySQL查询的结果填充了一个数组 问题是,当我创建一个函数来回显数组中的某个元素时,它不起作用,没有函数就没有错误 建立连接,执行查询,将结果存储在变量中: require_once("db.php"); $conn = mysqli_connect($servername, $username, $password, $dbname); if (!$conn) { die("Connection failed: " . mysqli_connect_

我在使用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];
有人能解释一下这个函数出了什么问题,或者我该如何修复它以使其正常工作吗?谢谢大家!


服务器正在运行PHP5.6.19

函数没有引入未在函数中定义或传入的变量。由于未定义或传入$query\u result和$result\u数组,脚本将无法工作。但是,如果没有函数,该变量将被定义,因此脚本将工作。要使函数工作,只需传入变量$query\u result、$result\u数组或在函数中定义它

编辑:正如Adam所说,您可以在函数中定义将其用作全局变量:
全局$query\u result,$result\u数组

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

检查变量范围。您的函数没有变量
$query\u 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\u 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\u result
,但显式参数通常是更好的编程风格。

我没有看到$I在函数中声明为0。@cpugouru未定义的变量在算术上下文中使用时会变成
0
。谢谢。我从没想过这个。尽管如此,我将继续正确地声明我的所有变量。。。有点老派。可能是因为我从来没有使用while来遍历数组…非常感谢您的解释,我现在明白了缺少什么了。它工作得很好。