@ivanich274

Как можно пересортировать массив по моему алгоритму?

Входящими данными является, к примеру:
1. Количество распределения = 3
2. Массив
[0] => Продам котлету
[1] => Продам ботинок
[2] => Продам семки
[3] => Продаётся котлету
[4] => Продаётся ботинок
[5] => Продаётся семки
[6] => Продажа котлету
[7] => Продажа ботинок
[8] => Продажа семки

Что я должен получить на выходе:

[0] => Продам котлету
[4] => Продаётся ботинок
[8] => Продажа семки

[1] => Продам ботинок
[5] => Продаётся семки
[6] => Продажа котлету

[2] => Продам семки
[3] => Продаётся котлету
[7] => Продажа ботинок

Т.е на выходе мне необходимо получить пересортированный массив, элементы которого всегда будут разными, ключевое значение в примере, равное 3 принимает участие в алгоритме сортировки, т.к цифра может меняться.

Возможно я несу бред.
  • Вопрос задан
  • 276 просмотров
Пригласить эксперта
Ответы на вопрос 2
@ollisso
Какой алгоритм не понятен, но ключевые слова: "пересортировать массив по моему алгоритму" - это одна из 2 функций:
php.net/uasort
php.net/uksort

------------------------------------
Если по новому ставится задача то легче сделать так:
1. выделяете ключевые слова (продам, продаётся, продажа"
2. выделяются вторые слова
3. склеиваются.

$keys  = ["Продам", "Продаётся", "Продажа"];
$words = ["котлету", "ботинок", "семки"];

$groupSize  = 3;
$amount = sizeof($keys)*sizeof($words);
$list = array_fill(0,$amount, "");
foreach ($keys as $group => $groupName) {
    foreach ($words as $item => $word) {

        $index = (($group+$item) * $groupSize + $group)%$amount;

        $list[$index] = $groupName . ' ' . $word;


    }

}

print_r($list);


Или, если вы хотите по частям, то например так:

/** Создаём список. важно что он имеет строгий формат */
$keys  = ["Продам", "Продаётся", "Продажа"];
$words = ["котлету", "ботинок", "семки"];

$list = [];
foreach ($words as $wordId => $word) {
    foreach ($keys as $groupId => $groupName) {
        $list[] = $groupName . ' ' . $word;
    }
}
// сортируем
$groupSize  = 3;
$output = array_fill(0, sizeof($list), "");

foreach ($list as $id => $string) {
    $group = floor($id/$groupSize);
    $item = $id%$groupSize;
    $index = (($group+$item) * $groupSize + $item)%sizeof($list);
    $output[$index] = $string;

}

print_r($output);
Ответ написан
в функции создайте временный массив и добавляйте к нему нужные элементы с нужными индексами потом временый масив на выход через return
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы