我遇到以下问题: 我有这个函数,我将查询结果($ 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'" }
答案 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())
$count
变量。