I think you can use something like the following:
$test = array(
'key_a' => array('a', 'b'),
'key_b' => array('c', 'd')
);
$max_length = 0;
$data = array();
foreach($test as $key => $value) { //Find the max_length of all subarrays
$this_length = count($value);
if ($this_length > $max_length) {
$max_length = $this_length;
}
}
for($i = 0; $i < $max_length; $i++) { //For all subarray's values (horizontal)
foreach($test as $key => $value) { //Foreach array (vertical)
if (isset($value[$i])) { //If the value is set
$data[$i][$key] = $value[$i];
}
}
}
var_dump($data);
Result:
array (size=2)
0 =>
array (size=2)
'key_a' => string 'a' (length=1)
'key_b' => string 'c' (length=1)
1 =>
array (size=2)
'key_a' => string 'b' (length=1)
'key_b' => string 'd' (length=1)
Also works for uneven arrays:
$test = array(
'key_a' => array('a', 'b', 'M'),
'key_b' => array('c', 'd',)
);
Result:
array (size=3)
0 =>
array (size=2)
'key_a' => string 'a' (length=1)
'key_b' => string 'c' (length=1)
1 =>
array (size=2)
'key_a' => string 'b' (length=1)
'key_b' => string 'd' (length=1)
2 =>
array (size=1)
'key_a' => string 'M' (length=1)
$array = array_values($array);....