PHP переупорядочивает ключи массива с определенного ключа, возвращаясь назад

0

Итак, у меня есть массив:

$array = array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');

Очевидно, что они индексируются 0-6.

Я хочу передать определенный индекс ключа, а затем переупорядочить массив, начиная с этого ключа, а затем пройти через остальные в том же порядке, например:

print_r(somefunction(3, $array));

который напечатает это:

array
(
    '0'=>'Wed',
    '1'=>'Thu',
    '2'=>'Fri',
    '3'=>'Sat',
    '4'=>'Sun',
    '5'=>'Mon',
    '6'=>'Tue'
)

Есть ли основная функция, которая сделает это, или у кого-нибудь есть быстрое решение?

ОБНОВИТЬ

Здесь моя последняя функция, немного больший по охвату, чем мой вопрос выше, который использует ответ AbraCadaver:

public static function ordered_weekdays($format = 'abr')
{
    $array = $format == 'full' ? array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') : array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
    return array_merge(array_splice($array, get_option('start_of_week'), count($array)-1), $array);
}

Поскольку это хороший однострочный, мне не нужно было делать его отдельной функцией.

  • 0
    разделить массив по номеру индекса, затем добавить первую часть ко второму
  • 0
    Мой вопрос не заслуживал отрицательного ответа, кто бы это ни сделал. Спасибо, пользователь1954544. Это очевидное решение, которое ускользнуло от меня.
Теги:
arrays
sorting

3 ответа

1
Лучший ответ

Я делал это раньше и думал, что это проще, но вот что говорит мой мозг в данный момент:

$index = 3;
$array = array_merge(array_splice($array, $index, count($array)-1), $array);
  • 0
    Очень хороший однострочник. Благодарю.
1
function somefunction($n, array $a) {
    $x = array_slice($a, 0, $n);
    $y = array_slice($a, $n);
    return array_merge($y, $x);
}

// forget this: uneccessary looping...
function somefunction($n, array $a) {
        for($i = 0; $i < $n; $i++) {
                array_push($a, array_shift($a));
        }
        return $a;
}
  • 0
    Хорошее редактирование. Мне оригинал понравился, но не зацикливание предпочтительнее. Пробую новый сейчас.
  • 0
    Я немного сократил ваш: function somefunction ($ n, array $ a) {return array_merge (array_slice ($ a, $ n), array_slice ($ a, 0, $ n)); }
1

Попробуйте что-нибудь в этом направлении...

function reorder($x,$y)
{
    $c = count($y);
    for ($i=0; $i<$c; $i++)
    {
        $newArray[$i] = $y[$x];
        $x++;
        if ($x > $c) $x = 0;
    }
    return($newArray);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню