Search code examples
phparrayslaravel-7

Reorganizing multidimentional php array to another multidimentional array where first elemnt can be used as array key


What is the best way to convert the following array in a way where the output will be as shown below.

Initial Array

array:2 [▼
  0 => array:4 [▼
    "group" => "1"
    4 => "19"
    6 => "27"
    8 => "160"
  ]
  1 => array:4 [▼
    "group" => "2"
    4 => "20"
    6 => "28"
    8 => "200"
  ]
]

the desired array:

array:6 [▼
  0 => array:3 [▼
       "group" => "1"
       "es_variation_set_id" => "4" << this is key form the initial array
       "es_variation_id" => "19" << this is value form the initial array
 ]
  1 => array:3 [▼
       "group" => "1"
       "es_variation_set_id" => "6" << this is key form the initial array
       "es_variation_id" => "28" << this is value form the initial array
 ]
  2 => array:3 [▼
       "group" => "1"
       "es_variation_set_id" => "8" << this is key form the initial array
       "es_variation_id" => "160" << this is value form the initial array
 ]
  3 => array:3 [▼
       "group" => "2"
       "es_variation_set_id" => "4" << this is key form the initial array
       "es_variation_id" => "20" << this is value form the initial array
 ]
  4 => array:3 [▼
       "group" => "2"
       "es_variation_set_id" => "6" << this is key form the initial array
       "es_variation_id" => "28" << this is value form the initial array
 ]
  5 => array:3 [▼
       "group" => "1"
       "es_variation_set_id" => "8" << this is key form the initial array
       "es_variation_id" => "200" << this is value form the initial array
 ]       
]

Here is my foreach

    foreach ($request->only('product_variations')['product_variations'] as $variation_value)
    {

        if($variation_value['group'] != 0){
            dd($variation_value);
        }
    }

please suggest the best way to go about this issue

Thanks in advance


Solution

  • You can tackle this with a nested foreach loop that pulls out the group value before running each time.

    $output = [];
    foreach ($input as $subArray) {
        $group = $subArray['group'];
        unset($subArray['group']);
        foreach ($subArray as $setId => $variationId) {
            $output[] = [
                'group' => $group,
                'es_variation_set_id' => $setId,
                'es_variation_id' => $variationId,
            ];
        }
    }
    

    Demo here: https://3v4l.org/KLf8Y