为什么我的多维数组没有正确初始化和/或返回?

时间:2018-01-23 21:30:46

标签: php mysql sql arrays multidimensional-array

我遇到以下问题: 我有这个函数,我将查询结果($ matches_lines)作为参数传递。在我的函数中,我从查询结果中获取了所需的所有数据,并且我试图将其存储在多维数组中。我的代码如下:

function check_matches($matches_lines, $minage, $maxage, $actual_persontype){

    $result = array(array());
    $count = 0;

    foreach($matches_lines as $lines){

        $match_user = $lines["signup_username"];
        $match_birth = $lines["signup_birth"];
        $match_city = $lines["signup_city"];
        $match_gender = $lines["signup_gender"];
        $match_os = $lines["signup_os"];
        $match_persontype = $lines["signup_persontype"];

        if("some condition I want to verify"){

            $new_add = array($match_user, $match_birth, $match_city, $match_gender, $match_os, $match_persontype);
            array_push($result[$count], $new_add);
            $count = $count+1;  
        }
    }
    return $result;
} 

我只是在调用我的函数:

$matches_found = check_matches($matches_lines, $minage, $maxage, $actual_persontype);

通过这样做我不会得到错误,但是当我尝试回显一行

echo $matches_found[0][0];

我得到了#34;惠普公告:未定义的偏移量:0"。

我做错了什么?

编辑:var_dump($ matches_found)返回" array(0){}"

而var_dump($ matches_lines)返回

object(PDOStatement)#3(1){[" queryString"] => string(277)" SELECT s.signup_username,s.signup_birth,s.signup_city,s.signup_gender,s.signup_os,s.signup_persontype  来自注册  WHERE s.signup_username<> '莱昂纳多' &安培;&安培; s.signup_city ='都灵' &安培;&安培; s.signup_os =' Windows'" }

1 个答案:

答案 0 :(得分:2)

您的代码问题肯定在于您的情况。它不匹配任何行,因此结果不包含内部数组的值。 如果没有匹配项,结果将如下所示:

$matches_found = [
    0 => [/*This array does not contain an index 0, because it is empty*/]
];

因此,调用$matches_found[0][0]会为第二个0引发错误,因为内部数组为空。

由于您没有提供条件,我们无法帮助您修复它。

我可以判断这是错误的原因是,条件背后的代码包含错误,并且您说我没有收到错误。因此它永远不会被执行。

array_push($result[$count], $new_add)行要求第一个参数$result[$count]为数组。这适用于第一次迭代,因为您使用$result初始化[[]]。对于使用$count = 1的第二次通话,$result中的索引1不会有任何字段。因此,您将获得" 未定义的偏移量:1 "错误或" 函数array_push期望参数1是数组类型。 null "错误。

这可以通过使用本机PHP处理将值附加到数组来解决:

$result[] = [$new_add];

$result[] =将处理新元素的追加,而[$new_add]是一个包含一个元素的数组,即新行。如果你不需要将它包装在一个额外的数组中($new_add已经是一个数组本身),你可以省略它周围的括号。

注意,为了让这项工作正常,您必须使用$result而不是$result = [];(或$result = [[]];而不是array())初始化array(array())

然后,PHP会处理新的索引本身。您可以删除$count变量。