3v4l.org

run code in 300+ PHP versions simultaneously
<?php $array1 = array( 'cover.xhtml', 'title.xhtml', 'copyright.xhtml', 'dedication.xhtml', 'toc_brief.xhtml', 'toc.xhtml', 'ch02_1.xhtml', 'ch02_2.xhtml', 'ch02_3.xhtml', 'ch02_4.xhtml', 'ch02_5.xhtml', 'ch02_6.xhtml', 'ch02_7.xhtml', 'ch02_8.xhtml', 'ch02_9.xhtml', 'ch02_10.xhtml' ); $array2 = array( '', 'title.xhtml', 'copyright.xhtml', 'dedication.xhtml', 'ch02_2.xhtml', 'ch02_2#454.xhtml', 'ch02_4.xhtml', 'ch02_1.xhtml', 'ch02_11.xhtml', 'ch02_12.xhtml', '' ); $customOrder = array_flip([ 'cover', 'title', 'copyright', 'dedication', 'toc_brief', 'toc', 'ch' ]); $uniqueFiltered = array_unique(array_filter(array_merge($array1, $array2))); array_multisort( array_map(fn($v) => $customOrder[strtok($v, '.012345789')], $uniqueFiltered), str_replace('#', '_', $uniqueFiltered), SORT_NATURAL, $uniqueFiltered ); var_export($uniqueFiltered);
Output for 7.4.0 - 7.4.33, 8.0.1 - 8.0.30, 8.1.0 - 8.1.34, 8.2.0 - 8.2.30, 8.3.0 - 8.3.30, 8.4.1 - 8.4.18, 8.5.0 - 8.5.3
array ( 0 => 'cover.xhtml', 1 => 'title.xhtml', 2 => 'copyright.xhtml', 3 => 'dedication.xhtml', 4 => 'toc_brief.xhtml', 5 => 'toc.xhtml', 6 => 'ch02_1.xhtml', 7 => 'ch02_2.xhtml', 8 => 'ch02_2#454.xhtml', 9 => 'ch02_3.xhtml', 10 => 'ch02_4.xhtml', 11 => 'ch02_5.xhtml', 12 => 'ch02_6.xhtml', 13 => 'ch02_7.xhtml', 14 => 'ch02_8.xhtml', 15 => 'ch02_9.xhtml', 16 => 'ch02_10.xhtml', 17 => 'ch02_11.xhtml', 18 => 'ch02_12.xhtml', )

preferences:
87.56 ms | 1319 KiB | 4 Q