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.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.27, 8.4.1 - 8.4.14
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:
115.43 ms | 408 KiB | 5 Q