Php 当count显示数组中的元素数时,数组中存在未定义的偏移量错误
正如标题中所述,我在下面的代码中遇到了一个奇怪的问题Php 当count显示数组中的元素数时,数组中存在未定义的偏移量错误,php,arrays,Php,Arrays,正如标题中所述,我在下面的代码中遇到了一个奇怪的问题 for($i=0; $i < count($maindata) ; $i++){ $currentId = $maindata[$i]['SubmissionId']; $output = array_filter($subdata, function ($value) use ($currentId) { return $subda
for($i=0; $i < count($maindata) ; $i++){
$currentId = $maindata[$i]['SubmissionId'];
$output = array_filter($subdata, function ($value) use ($currentId)
{ return $subdata['ParentId'] == $currentId; });
echo 'total sub data '.count($output); //output 86
for($j=0; $j < count($output) ; $j++){
echo $output[$j]['SubmissionId']; //Undefined offset Error
}
}
for($i=0;$i
如您所见,我循环了一个数组。在循环内部,我过滤掉另一个数组以获得关联数据
然后我回显过滤器数组的计数
并用另一个循环回显数据。第一项的代码很好,它显示数据,但从第二项开始,它显示
注意:第79行myfile中未定义的偏移量:0
在第二个循环中,但计数仍显示正确答案。第79行是echo$output[$j]['SubmissionId']//未定义的偏移错误
请帮我找出问题所在。提前谢谢 解决方案:-
在第二次迭代中使用以下内容:-
if(isset($output[$j]['SubmissionId'])){echo $output[$j]['SubmissionId'];}
说明:-
$output
是一个已过滤的子数组,由于过滤,很可能缺少某些索引
当您为($j=0;$j操作时,如果count($output)
为86
则表示循环将按顺序执行0-85
现在,如果$output
缺少索引3
(例如),那么代码$output[$j]['SubmissionId']
将给出错误
所以请检查使用上述代码和问题是否已解决
第二意见:-
您可以执行以下操作:-
$output = array_values($output);
echo 'total sub data '.count($output); //output 86
for($j=0; $j < count($output) ; $j++){
echo $output[$j]['SubmissionId'];
}
$output=array\u值($output);
回显“总计子数据”。计数($output);//输出86
对于($j=0;$j
注意:-这种方法将重新索引您的数组,如果您打算在某些地方使用原始索引,则此代码将导致出现问题
第三选项(优于第二选项)
因为foreach()
要注意索引,所以不要使用for()
循环使用foreach
谢谢我通过将数组打印为@Anant-提述找到了问题所在。起初我以为$output array的索引将从零开始作为普通数组。但是,由于我是从array\u filter获得的,索引将从上一个过滤数组的末尾开始
所以我把第二个循环改为foreach,现在问题解决了
谢谢大家!!!首先,我认为“foreach”循环而不是“for”将更清晰,更符合您的需要
第二次,您是否尝试进行var_转储而不是echo,以查看阵列中的结构
for($i=0; $i < count($maindata) ; $i++){
$currentId = $maindata[$i]['SubmissionId'];
$output = array_filter($subdata, function ($value) use ($currentId)
{ return $subdata['ParentId'] == $currentId; });
var_dump($output);exit();
.....
for($i=0;$i
可能您没有SubmissionId子索引。要删除错误,您需要执行if(isset($output[$j]['SubmissionId']){echo$output[$j]['SubmissionId'];}
。此外,您必须在第二次迭代之前打印$output
,并向我们显示数据。可能需要一些更正。请输入完整的错误消息。添加$output数组的示例,这几乎不是一个完整的错误跟踪。通常,它们也由一个行号来处理。据我们所知,错误甚至可能不存在在线上你认为是的foreach是我的问题。