简体   繁体   中英

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

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

You are almost there. You just need to add another foreach in the if condition to individually add the group, the key and the value pairs.

<?php

$res = [];

foreach ($request->only('product_variations')['product_variations'] as $variation_value){
    if($variation_value['group'] != 0){
        foreach($variation_value as $k => $v){
            if($k == 'group') continue;
            $res[] = [
                'group' => $variation_value['group'],
                'es_variation_set_id' => $k,
                'es_variation_id' => $v
            ];
        }
    }
}

print_r($res);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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