<?php //Initial data array $data = array( 'Year' => array( // Category '2000', '2000', '2000', '2001', '2001', '2002', '2002', '2003' ), 'Country' => array( // Serie 'US', 'SE', 'JP', 'US', 'SE', 'US', 'JP', 'US' ), 'PO Numbers' => array( // Measure 50, 40, 30, 60, 50, 70, 20, 80 ) ); //Expect result /* $data = array( 'Year' => array( // Category '2000', '2000', '2000', '2001', '2001', '2001', //new add '2002', '2002', //new add '2002', '2003', '2003', //new add '2003' //new add ), 'Country' => array( // Serie 'US', 'SE', 'JP', 'US', 'SE', 'JP', //new add 'US', 'SE', //new add 'JP', 'US', 'SE', //new add 'JP' //new add ), 'PO Numbers' => array( // Measure 50, 40, 30, 60, 50, 0 , //new add 70, 0 , //new add 20, 80, 0 , //new add 0 //new add ) ); */ // // Code // / $count = count(current($data)); for($i = 0; $i < $count; $i++){ $data['Year-Country'][$i] = $data['Year'][$i].'-'.$data['Country'][$i]; } $uniqueSerieData = array_unique($data['Country']); $uniqueCatData = array_unique($data['Year']); $totalCount = count($uniqueSerieData) * count($uniqueCatData); $uniqueData = array(); $i = 0; foreach($uniqueCatData as $ucd){ foreach($uniqueSerieData as $usd){ $uniqueData[$i]['Year'] = $ucd; $uniqueData[$i]['Country'] = $usd; $i += 1; } } $outputData = array(); for($i = 0; $i < $totalCount; $i++){ $uData = $uniqueData[$i]['Year'].'-'.$uniqueData[$i]['Country']; $flag = array_keys($data['Year-Country'],$uData); if($flag){ $j = $flag[0]; $outputData['Year'][$i] = $data['Year'][$j]; $outputData['Country'][$i] = $data['Country'][$j]; $outputData['PO Numbers'][$i] = $data['PO Numbers'][$j]; } else { $outputData['Year'][$i] = $uniqueData[$i]['Year']; $outputData['Country'][$i] = $uniqueData[$i]['Country']; $outputData['PO Numbers'][$i] = 0; } } print_r($outputData);