Сортировка группы массивов в один массив, используя важность как вес - PullRequest
0 голосов
/ 29 июля 2011

PHP. У меня есть три массива, каждый из которых содержит 50 элементов: $ статей, $ цитат, $ ссылок. Каждый элемент в каждом массиве имеет строку содержимого и дату.

Цель состоит в том, чтобы создать один массив, отсортированный по дате (от самого нового к самому старому), который весит в зависимости от важности типа массива. Например, он всегда должен показывать больше статей, чем цитат, и больше цитат, чем ссылок. Например:

Статья, статья, статья, цитата, статья, ссылка, статья, статья, цитата, статья, статья, цитата, статья, ссылка.

Есть ли простой способ сделать это? Спасибо!

Ответы [ 2 ]

1 голос
/ 29 июля 2011

Вы можете воспользоваться мод-оператором.

$result = array();
$i = 0;
$count = 0;
while( true ) {
  $i++;

  $result[] = array_pop( $articles );
  if (++$count >= 50) break; // 50 items is enough

  if ( $i % 3 == 0 ) { // one quote every 3 articles
       $result[] = array_pop( $quotes );
       if (++$count >= 50) break;
  }

  if ( $i % 5 == 0 ) // one link every 5 articles
       $result[] = array_pop( $links );
       if (++$count >= 50) break;
  }
}
0 голосов
/ 29 июля 2011
  • Вы можете отсортировать каждый из трех массивов по дате, а затем выполнить ручную сортировку слиянием на основе (дата, важность).Перед сортировкой слиянием, вероятно, стоит поместить три массива в один массив и написать общую сортировку слиянием, чтобы вы могли позже легко добавить новые типы в систему.
  • Вы можете добавить настраиваемое поле для каждой записи, котороепомечает важность, объединяет три массива, затем использует встроенную сортировку с пользовательским сравнением на основе (дата, важность).Это очень легко реализовать.

хм ... извините за недоразумение, я подумал, что вы хотите отсортировать элементы по дате и если это равно по важности: /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...