3v4l.org

run code in 300+ PHP versions simultaneously
<?php $string = 'title:hello;desc:message|title:lorem;desc:ipsum;ids:1,2,3'; $result = []; foreach (explode('|', $string) as $setString) { $set = []; foreach (explode(';', $setString) as $rowString) { [$key, $value] = explode(':', $rowString); $set[$key] = str_contains($value, ',') ? explode(',', $value) : $value; } $result[] = $set; } var_export($result); /* Array ( [0] => Array ( [title] => hello [desc] => message ) [1] => Array ( [title] => lorem [desc] => ipsum [ids] => Array ( [0] => 1 [1] => 2 [2] => 3 ) ) )*/
Output for 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
array ( 0 => array ( 'title' => 'hello', 'desc' => 'message', ), 1 => array ( 'title' => 'lorem', 'desc' => 'ipsum', 'ids' => array ( 0 => '1', 1 => '2', 2 => '3', ), ), )

preferences:
65 ms | 407 KiB | 5 Q