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是我的问题。