3v4l.org

run code in 300+ PHP versions simultaneously
<?php $array = [ 'id_1_1' => 'id1', 'foo_1_2' => 'value1_1', 'bar_1_3' => 'value1_2', 'more_1_4' => 'value1_3', 'id_2_1' => 'id2', 'foo_2_2' => 'value2_1', 'bar_2_3' => 'value2_2', 'more_2_4' => 'value2_3' ]; function convert($a) { $map = [ ]; $result = []; foreach ($a as $array_key => $value) { list($newkey, $number) = explode('_', $array_key); if ($newkey === 'id') { $map[$number] = $value; $result[$value] = []; } elseif (key_exists($number, $map)) { $id = $map[$number]; $result[$id][$newkey] = $value; } } return $result; } function deconvert($result) { $array = []; $i = 1; foreach ($result as $id => $arr) { $array['id_'.$i.'_1'] = $id; $j = 1; foreach ($arr as $key => $value) { $array[$key . '_' . $i . '_' . $j] = $value; $j++; } $i++; } return $array; } $result = convert($array); var_export($result); $back = deconvert($result); var_export($back);
Output for 7.1.0 - 7.1.20, 7.2.0 - 7.2.33, 7.3.16 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.27, 8.2.0 - 8.2.18, 8.3.0 - 8.3.4, 8.3.6
array ( 'id1' => array ( 'foo' => 'value1_1', 'bar' => 'value1_2', 'more' => 'value1_3', ), 'id2' => array ( 'foo' => 'value2_1', 'bar' => 'value2_2', 'more' => 'value2_3', ), )array ( 'id_1_1' => 'id1', 'foo_1_1' => 'value1_1', 'bar_1_2' => 'value1_2', 'more_1_3' => 'value1_3', 'id_2_1' => 'id2', 'foo_2_1' => 'value2_1', 'bar_2_2' => 'value2_2', 'more_2_3' => 'value2_3', )
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 array ( 'id1' => array ( 'foo' => 'value1_1', 'bar' => 'value1_2', 'more' => 'value1_3', ), 'id2' => array ( 'foo' => 'value2_1', 'bar' => 'value2_2', 'more' => 'value2_3', ), )array ( 'id_1_1' => 'id1', 'foo_1_1' => 'value1_1', 'bar_1_2' => 'value1_2', 'more_1_3' => 'value1_3', 'id_2_1' => 'id2', 'foo_2_1' => 'value2_1', 'bar_2_2' => 'value2_2', 'more_2_3' => 'value2_3', )

preferences:
166.93 ms | 402 KiB | 162 Q