[英]How to store data in array in loop
我正在尝试使用格式如下的数据:
{"parent":
{"class":"Green","user_name":"Nitish","user_loc":"Delhi","user_id":1,"user_blockclass":null,
"child":[
{"class":"Green","user_name":null,"user_loc":null,"user_id":1,"user_blockclass":"fst",
"child":[
{"class":"Green","user_name":"pandey","user_loc":"sdgfsjd","user_id":6,"user_blockclass":"fst"},
{"class":"Green","user_name":"chaku","user_loc":"sdgjs","user_id":7,"user_blockclass":"snd"},
{"class":"Green","user_name":"iks","user_loc":"sjkdfhkjs","user_id":8,"user_blockclass":"trd"},
{"class":"Green","user_name":"yash","user_loc":"hfksjdhfk","user_id":9,"user_blockclass":"frt"},
{"class":"Green","user_name":"joshi","user_loc":"dsfh","user_id":10,"user_blockclass":"fth"}
]},
{"class":"Green","user_name":null,"user_loc":null,"user_id":1,"user_blockclass":"snd",
"child":[
{"class":"Green","user_name":"pandey","user_loc":"sdgfsjd","user_id":6,"user_blockclass":"fst"},
{"class":"Green","user_name":"chaku","user_loc":"sdgjs","user_id":7,"user_blockclass":"snd"},
{"class":"Green","user_name":"iks","user_loc":"sjkdfhkjs","user_id":8,"user_blockclass":"trd"},
{"class":"Green","user_name":"yash","user_loc":"hfksjdhfk","user_id":9,"user_blockclass":"frt"},
{"class":"Green","user_name":"joshi","user_loc":"dsfh","user_id":10,"user_blockclass":"fth"}
]},
]
}
每个元素将包含5个子元素,每个子元素将分别包含5个子元素。 现在,我正在尝试将数据推入数组:
public function viewplans(Request $request)
{
$selectplan = $request->selectplan;
$user = Auth::user();
$userinfo= [];
$userinfo['class'] = "Green";
$userinfo['user_name'] = $user->name;
$userinfo['user_loc'] = $user->city;
$userinfo['user_id'] = $user->id;
if($selectplan == 1)
{
$blockclass = ['fst', 'snd', 'trd', 'frt', 'fth'];
$children = $user->relations()->wherePlanId($selectplan)->get();
$subuserinfo = [];
$subsubuserinfo = [];
for($i = 0; $i <5; $i++)
{
if($children[$i])
{
$subuser = User::findOrFail($children[$i]->pivot->child);
$subuserinfo['class'] = "Green";
$subuserinfo['user_name'] = $subuser->name;
$subuserinfo['user_loc'] = $subuser->city;
$subuserinfo['user_id'] = $subuser->id;
$subuserinfo['user_blockclass'] = $blockclass[$i];
$subchildren = $subuser->relations()->wherePlanId($selectplan)->get();
for($j = 0; $j < 5; $j++)
{
if($subchildren[$j]){
$subsubuser = User::findOrFail($subchildren[$j]->pivot->child);
$subsubuserinfo['class'] = "Green";
$subsubuserinfo['user_name'] = $subsubuser->name;
$subsubuserinfo['user_loc'] = $subsubuser->city;
$subsubuserinfo['user_id'] = $subsubuser->id;
$subsubuserinfo['user_blockclass'] = $blockclass[$j];
$subuserinfo['child'][$j] = $subsubuserinfo;
}
else
{
$subsubuserinfo['class'] = "Black";
$subsubuserinfo['user_name'] = 'No User';
$subsubuserinfo['user_loc'] = 'No Loc';
$subsubuserinfo['user_id'] = 'No ID';
$subsubuserinfo['user_blockclass'] = $blockclass[$j];
$subuserinfo['child'][$j] = $subsubuserinfo;
}
}
$userinfo['child'][$i] = $subuserinfo;
}
else
{
$subsubuserinfo['class'] = "Black";
$subsubuserinfo['user_name'] = 'No User';
$subsubuserinfo['user_loc'] = 'No Loc';
$subsubuserinfo['user_id'] = 'No ID';
$subsubuserinfo['user_blockclass'] = $blockclass[$i];
$userinfo['child'][$i] = $subuserinfo;
}
}
$tree = $userinfo;
// dd($tree);
return view('member.5matrix', [
'tree' => ($tree),
'blockclass' => $blockclass
]);
}
}
即使数据不可用,它也应存储else值。 目前,我遇到了错误:
未定义的偏移量:2
帮助我拥有JSON格式中提到的正确数据格式。
您显示的代码中唯一可能导致“ undefined offset:2”错误的地方是
$subuser = User::findOrFail($children[$i]->pivot->child);
要么
$subsubuser = User::findOrFail($subchildren[$j]->pivot->child);
使用整数( $i
或$j
)作为数组键的其他任何地方都在该键上设置一个值,这不会导致未定义的偏移量错误(如果不存在,它将创建键),或引用$blockclass
,它具有足够的元素,因此您的for
循环不会超过其长度。
这意味着无论出于何种原因,
$children = $user->relations()->wherePlanId($selectplan)->get();
要么
$subchildren = $subuser->relations()->wherePlanId($selectplan)->get();
返回的项目不如您预期的那么多。 (更具体地说,似乎它只返回两个项目,而不是五个。)
可能还有其他方法可以执行此操作,但是如果您想保持当前状态,则需要在使用它们之前添加检查,以确保已设置$children[$i]
和$subchildren[$j]
,如果没有,则添加默认值。
if ($subuser) {...
和if ($subsubuser) {...
检查是否已设置这些变量,但是在尝试设置它们时实际上会出现错误。 我认为您实际上可以将findOrFail
调用与if
条件内的$children[$i]
和$subchildren[$j]
的检查结合在一起:
if (isset($children[$i]) && $subuser = User::findOrFail($children[$i]->pivot->child)) {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.