PHP associative array- matched key value of each array will be a table row

Solution:

As every key (sku , price_html etc) has same amount of data , so just push the corresponding key data to a new array.

$data = [
'sku'                   => ['SKU125', 'SKU121', 'SKU122', 'SKU124'],
'variation_description' => ['test another', 'test', 'test', 'test'],
'price_html'            => ['400,200', '500', '600,300', '700']
 ];

$re_structured = [];

foreach ($data as $each_key_data ) {
   foreach ($each_key_data as $key => $value2 ) {
      $re_structured[$key][] = $value2;
   }
}
var_dump($re_structured);

Answer

Solution:

You can simply iterate through data and create a new array.

$data = [
    'sku'                   => ['SKU125', 'SKU121', 'SKU122', 'SKU124'],
    'variation_description' => ['test another', 'test', 'test', 'test'],
    'price_html'            => ['400,200', '500', '600,300', '700']
];

$mapped = [];
$keys = array_keys($data);
$rows = count($data[reset($keys)]);

for ($i = 0; $i < $rows; $i++) {
    $row = [];
    foreach ($keys as $key)
        $row[] = $data[$key][$i];
    $mapped[] = $row;
}

This will result in

print_r($mapped);
Array
(
    [0] => Array
        (
            [0] => SKU125
            [1] => test another
            [2] => 400,200
        )

    [1] => Array
        (
            [0] => SKU121
            [1] => test
            [2] => 500
        )

    [2] => Array
        (
            [0] => SKU122
            [1] => test
            [2] => 600,300
        )

    [3] => Array
        (
            [0] => SKU124
            [1] => test
            [2] => 700
        )

)

Source