Nitish Kumar
Nitish Kumar

Reputation: 6276

How to create an multidimensional array in Laravel/PHP

I'm trying to store some values in one array, where each element has its child element.

Please find the code:

$children = $user->relations()->wherePlanId($selectplan)->get();
foreach($children as $ch)
{
  $child[] = $ch->pivot->child;
  $subuser = User::find($ch->pivot->child);
  if($subuser){
      $subchildren = $subuser->relations()->wherePlanId($selectplan)->get();
      foreach($subchildren as $subchild)
      {
        $subchildid[] = $subchild->pivot->child;
      }
   }
  else
  {
    $subchildid[] = NULL;
  }
}

I want to store something like child['parent_element']['child_element'] i.e expected array format

child[1][2]
child[1][3]
child[1][4]
child[1][5]
child[2][6]
child[2][7]
.
.
child[3][12]

Help me out. Thanks

Upvotes: 1

Views: 24644

Answers (2)

Beginner
Beginner

Reputation: 4153

Assuming your table data is

tblusers

id   name
 1   John
 2   Doe
 3   Carl
 4   Jose
 5   Bill
 6   James
 7   Karl

tblparents

id  parent  child
1    1       2
2    1       3
3    1       4
4    1       5
5    2       6
6    2       7

First: declare a variable which will store your array

$child_arr = [];

then loop your parent array

foreach($children as $ch) {
    // do something
}

Inside the loop of your parent loop the children your loop parent

foreach($subchildren as $subchild) {
    $child_arr['your parent id']['your child id'] = 'your desired value';
}

so your code would be like this

$child_arr = [];
$children = $user->relations()->wherePlanId($selectplan)->get();
foreach($children as $ch) {
    $parent_id = $ch->pivot->child;
    $subuser = User::find($ch->pivot->child);
    if($subuser) {
        $subchildren = $subuser->relations()->wherePlanId($selectplan)->get();
        foreach($subchildren as $subchild) {
            $child_id = $subchild->pivot->child;
            $child_arr[$parent_id][$child_id] = $subchild;
        }
    } else {
        $child_arr[$parent_id] = null;
    }
}

the result would be like this

array(
    [1] => array(
          [2] => 'value',
          [3] => 'value',
          [4] => 'value',
          [5] => 'value',
    ),
    [2] => array(
          [6] => 'value',
          [7] => 'value'
    ),
    etc...
)

or you can just leave 'value' to true

Upvotes: 5

irfanengineer
irfanengineer

Reputation: 1300

Try This:

foreach($children as $ch)
{
  $child[] = $ch->pivot->child;
  $subuser = User::find($ch->pivot->child);
  if($subuser){
      $subchildren = $subuser->relations()->wherePlanId($selectplan)->get();
      foreach($subchildren as $subchild)
      {
        $subchildid[$ch->pivot->child] = $subchild->pivot->child;
      }
   }
  else
  {
    $subchildid[] = NULL;
  }
}

Upvotes: 0

Related Questions