将结果返回给函数后未定义的偏移量,php

rkkpypqq  于 2021-06-24  发布在  Mysql
关注(0)|答案(3)|浏览(413)

我的sql查询结果保存在变量中 $res .
print_r()$res 这么说,没关系(我想):

Array ( [0] => Array ( [hoejdemeter] => 1152 [laengde] => 24120 ) )

这个 $res 返回到函数并循环以获取两个变量:

foreach ($Data as  $value) {
    list ($length, $hight) = $Data;
}

然后我遇到了一个问题:
注意:第95行的c:\xampp\htdocs\phpproject1\bjergcykel1.php中未定义的偏移量:0
怎么了?

xtfmy6hx

xtfmy6hx1#

你的问题是使用 list 使用关联数组。这个 list 文件明确指出:
list()只适用于数值数组,并假定数值索引从0开始。
你的数组有两个字符串键 hoejdemeter 以及 laengde 而不是数字指数 0 以及 1 .
检索数据最干净的方法是:

foreach ($Data as $value) {
    $height = $value['hoejdemeter'];
    $length = $value['laengde'];
    //... Do something with $height and $length inside the foreach
}

使用函数来检索值,而不是使用键并手动分配它们,只会降低代码的可读性,在您的情况下不应该这样做。

pkbketx9

pkbketx92#

你的问题不完整-我们看不到实际的代码示例,所以很难判断函数内部发生了什么。我强烈建议你阅读这篇关于如何用聪明的方式提问的优秀文章
我建议你构造一个极简主义的例子来显示这样的错误:

<?php

 function test($data){
                print_r($data);

                foreach ($data as  $value) {
                list($length, $hight) = $value;
                    echo("DEBUG: $length, $hight\n");
                }
        }

        $data=array(array ("hoejdemeter" => 1152, "laengde" => 24120 ) );
        test($data);

?>

输出为:

Array
(
    [0] => Array
        (
            [hoejdemeter] => 1152
            [laengde] => 24120
        )

)
PHP Notice:  Undefined offset: 0 in /tmp/foo.php on line 7
PHP Notice:  Undefined offset: 1 in /tmp/foo.php on line 7
DEBUG: ,

我猜你想做的是:

<?php

 function test($data){
                print_r($data);

                foreach ($data as  $value) {
                print_r($value);
                list($length, $hight) = array_values($value);
                    echo("DEBUG: $length, $hight\n");
                }
        }

        $data=array(array ("hoejdemeter" => 1152, "laengde" => 24120 ) );
        test($data);

?>

输出:

Array
(
    [0] => Array
        (
            [hoejdemeter] => 1152
            [laengde] => 24120
        )

)
Array
(
    [hoejdemeter] => 1152
    [laengde] => 24120
)
DEBUG: 1152, 24120
pcww981p

pcww981p3#

你可以干脆不用 list :

foreach ($Data as  $value) {
    $hight  = $value['hoejdemeter'];
    $length = $value['laengde'];
}

相关问题