3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Person { public $id; public $name; public $phones = []; public function __construct($id, $name) { $this->id = $id; $this->name = $name; } public function addPhone($phone) { $this->phones[] = $phone; } } /** * @return Person[] */ function statementToPersonList(iterable $stmt): array { $personList = []; foreach ($stmt as $row) { $id = $row['id']; $name = $row['name']; $number = $row['number']; if (!isset($personList[$name])) { $personList[$name] = new Person($id, $name); } $personList[$name]->addPhone($number); } return $personList; } $personList = statementToPersonList([ ['id' => 1, 'name' => 'Alice', 'number' => 'n1'], ['id' => 2, 'name' => 'Alice', 'number' => 'n2'], ['id' => 3, 'name' => 'Bob', 'number' => 'n3'], ['id' => 4, 'name' => 'Carol', 'number' => 'n4'], ['id' => 5, 'name' => 'Alice', 'number' => 'n5'], ]); print_r($personList);
Output for 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 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 ( [Alice] => Person Object ( [id] => 1 [name] => Alice [phones] => Array ( [0] => n1 [1] => n2 [2] => n5 ) ) [Bob] => Person Object ( [id] => 3 [name] => Bob [phones] => Array ( [0] => n3 ) ) [Carol] => Person Object ( [id] => 4 [name] => Carol [phones] => Array ( [0] => n4 ) ) )

preferences:
134.31 ms | 409 KiB | 5 Q