1

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

3
  • what is your expected array format? Commented Dec 1, 2016 at 7:45
  • what's the structure your $children? Commented Dec 1, 2016 at 7:55
  • what should be the value of each of your index child['parent_element']['child_element']? Commented Dec 1, 2016 at 8:03

2 Answers 2

5

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

Sign up to request clarification or add additional context in comments.

Comments

0

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;
  }
}

1 Comment

It is overlapping the array value and only showing the last value!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.