3v4l.org

run code in 300+ PHP versions simultaneously
<?php $array = [ [ "id" => 1, "recipient" => "User", "userName" => "Max Mustermann", "locationName" => "Test Location" ], [ "id" => 2, "recipient" => "Location", "userName" => "Susi Mustermann", "locationName" => "Another Location" ], [ "id" => 3, "recipient" => "Location", "userName" => "Susi Mustermann", "locationName" => "Wow Much Location" ], [ "id" => 4, "recipient" => "User", "userName" => "Fritz Kalkbrenner", "locationName" => "Good Music" ], [ "id" => 5, "recipient" => "Location", "userName" => "Paul Kalkbrenner", "locationName" => null ], ]; usort($array,function($a,$b){ $sort2key = strtolower($a['recipient']).'Name'; return $a['recipient'] <=> $b['recipient'] ?: is_null($a['locationName']) <=> is_null($b['locationName']) ?: $a[$sort2key] <=> $b[$sort2key]; }); var_export($array);
Output for 7.4.0 - 7.4.33, 8.0.1 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.27, 8.4.1 - 8.4.14
array ( 0 => array ( 'id' => 2, 'recipient' => 'Location', 'userName' => 'Susi Mustermann', 'locationName' => 'Another Location', ), 1 => array ( 'id' => 3, 'recipient' => 'Location', 'userName' => 'Susi Mustermann', 'locationName' => 'Wow Much Location', ), 2 => array ( 'id' => 5, 'recipient' => 'Location', 'userName' => 'Paul Kalkbrenner', 'locationName' => NULL, ), 3 => array ( 'id' => 4, 'recipient' => 'User', 'userName' => 'Fritz Kalkbrenner', 'locationName' => 'Good Music', ), 4 => array ( 'id' => 1, 'recipient' => 'User', 'userName' => 'Max Mustermann', 'locationName' => 'Test Location', ), )

preferences:
102.66 ms | 408 KiB | 5 Q