繁体   English   中英

如何在循环中将数据存储在数组中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM