Задать вопрос
littleguga
@littleguga
Не стыдно не знать, а стыдно не интересоваться.

Какой алгоритм оптимальнее?

Задача: на вход получаем строку, состоящую из нескольких слов. разделенных пробелом.
Например: "я люблю тостер, каждый день отвечаю и задаю вопросы здесь"
Нужно написать функцию, которая будет разрезать введенную строку на 2 строки, в зависимости от заданного количества слов.

//Обрезает заголовок на основной и под, разделяя по пробелам
function cut_title($thistitle,$count){ //заголовок и количество слов на которые стоит обрезать
	$post_title = explode(" ", $thistitle);
	$post_title_title = "";
	$i = 0;
	while($i < $count){
		$post_title_title .= $post_title[$i]." ";
		$i++;
	}
	$ctitle['title'] = $post_title_title;
	$ctitle['sub'] = str_replace($post_title_title, "", $thistitle);
	return $ctitle; //возвращает массив $ctitle['title'] и $ctitle['sub']
}

Вопрос в том, как лучше построить цикл? Как есть или:
while($i++ < $count){
		$post_title_title .= $post_title[$i]." ";
	}

Или через for?

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

Заранее благодарен за подробный и развернутый ответ!
  • Вопрос задан
  • 308 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@IceJOKER
Web/Android developer
Без проверок(на кол. символов и т.д.):
$str = "я люблю тостер, каждый день отвечаю и задаю вопросы здесь";
$words = explode(' ', $str);
$num = 2; //кол. слов
$first_line = implode(' ', array_slice($words, 0, $num));
$second_line = implode(' ', array_slice($words, $num));

var_dump($first_line, $second_line);
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
laska
@laska
PHP/JS разработчик
1. Для этих целей, как вы верно заметили, придумали for. Он сюда подходит идеально, как будто пример в учебнике.
2. Среди while, for и foreach нет самых лучших и самых худших циклов в плане говнокодерства. Они нужны немного для разного. И правильнокодерство это использование каждого цикла по назначению. Читаемость от этого тоде чуть улучшится.
3. В плане производительности foreach медленнее, остальные примерно равны, но это представляет чисто теоретический интерес.
Ответ написан
Комментировать
angrySCV
@angrySCV
machine learning, programming, startuping
честно не понял что вы хотите оценить, какую оптимальность.
у алгоритмов есть разные метрики (оценочные харрактеристики)
например время работы, или потребление памяти, либо там размер кода.
сначало определите, какой из этих оценочных параметров вы хотите оптимизировать -> потом уже можно сказать какой из возможных вариантов оптимальнее.
если исходить из производительности, в времени исполнения (которое как правило оценивается по количеству операций) . то оба этих алгоритма абсолютно эквивалентны.
подробнее тут https://ru.wikipedia.org/wiki/Вычислительная_сложность
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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