0

I have an array of weekdays (german language) from my database. How can I sort it not alphabetically but in order of the week?

$daysOfWeek = array('Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So');
//example values here:
$days = array('Sa', 'Di', 'Mo', 'Fr');

How can I sort the $days array so that the result is:

$days = array(
    'Mo',
    'Di',
    'Fr',
    'Sa'
)

This did not work for me:

$daysSorted = array_merge(array_flip($daysOfWeek), $days);

EDIT:

Above arrays equal:

$daysOfWeek = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');
//example values here:
$days = array('Sat', 'Tue', 'Mon', 'Fri');

$days = array(
    'Mon',
    'Tue',
    'Fri',
    'Sat'
)
marl0ne
  • 1
  • 3

1 Answers1

0

The array_intersect shortcut is a clever approach. I like it. My solotion uses a custom sort function. Your choice

<?php
$daysOfWeek = array('Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So');
$daysOfWeek = array_flip($daysOfWeek);
//example values here:
$days = array('Sa', 'Di', 'Mo', 'Fr');
usort($days, function($a, $b) use ($daysOfWeek)
{
    if ($daysOfWeek[$a] === $daysOfWeek[$b]) return 0;
    else if ($daysOfWeek[$a] < $daysOfWeek[$b]) return -1;
    else return 1;
});
var_dump($days); 
jh1711
  • 2,228
  • 1
  • 9
  • 20