Xwab
Форумыnavigate_nextНебольшие вопросы по PHP/MySQL

Как определить какое из слов самое длинное?
Сообщения
roboforex

Есть строка вней от 1 до 5 слов, количество динамическое, если в строке больше 1-о слова и длина строки больше 15 символов, нужно найти самое длинное? Слова разделены пробелом.

09 Май 2013, 17:43
Default_mo

что называется, способ "на коленке", велосипедный трюк:

[php:1:97a6c0b729]<?php
$string = 'ololo ехал грека через реку видит грека в реке рак сунул грека руку в реку вотпришелемупипец';

$array_first = explode(' ',$string);
foreach($array_first as $k1=>$v1)
{
$array_second[$k1] = mb_strlen($v1,'utf-8');
}
$max = max($array_second);
foreach($array_first as $k2=>$v2)
{
if(mb_strlen($v2,'utf-8') == $max)
{
$array_max[$k2] = $v2;
}
}
print_r($array_max);
?>[/php:1:97a6c0b729]
добавлено спустя 13 секунд:
[php:1:97a6c0b729]Array ( [15] => вотпришелемупипец )[/php:1:97a6c0b729]
добавлено спустя 1 минуту:
ну и потом добавь свои условия по "вкусу".
добавлено спустя 32 секунды:
можно сделать проще)

09 Май 2013, 17:55
roboforex

Default_mo, спасиба, хотя я так и не понял логики. Ребят может у кого еще есть какие ришения можна без код, я вот думал разбить строку через пробел и создать массив в котором номер ключа будет длина, а как быть если слова одинаковые тогда будет токо одно слово этой длины.

09 Май 2013, 18:07
Fever

[php:1:45e093835e]$sMax = "";
preg_match_all("[a-zA-Zа-яА-Я-]+", "ololo ехал грека", $aOut);

for ($i = 0; $i < count($aOut[0]); $i++) {
if (strlen($aOut[0][$i]) > strlen($sMax)) $sMax = $aOut[0][$i];
}

echo $sMax;[/php:1:45e093835e]

09 Май 2013, 18:20
Default_mo

Fever, работать будет криво) strlen кирилицу считает не как латиницу, на букву приходится 2 байта, вместо 1. в итоге у тебя размер слова будет count_sym*2; т.е. слово

abcd будет короче чем абв )

вот так лучше, мб (мой код упростил, похож на код из 4 поста):
[php:1:0a57c62140]<?php
$string = 'ololo ехал грека через реку видит грека в реке рак сунул грека руку в реку вотпришелемупиздец';
$max = '';
$array_first = explode(' ',$string);
for($i = 0;$i < count($array_first);$i++)
{
if(mb_strlen($array_first[$i],'utf-8') > mb_strlen($max,'utf-8'))
{
$max = $array_first[$i];
}
}

echo $max
?>[/php:1:0a57c62140]

09 Май 2013, 19:06
u99

Уже давно есть известные алгоритмы, стоит хорошенько поискать.
Например переводишь строку в массив, где элменты слова.
потом цикл, делаешь первый элемент искомым самым длинным словом, а остальные сравниваешьс ним, если больше, то переопределяешь максимальный элемент.
Насчет кодировок да можно использовать библы mb_ или iconv_ в utf8

09 Май 2013, 19:11
roboforex

Решил проблему обычным обрезанием строки до 16 символов, как оказалось в большинстве случеев этого достаточно.

09 Май 2013, 21:11
Default_mo

wat?

09 Май 2013, 21:39
Fever

Default_mo пишет:
"работать будет криво"


интересно, запомню, спасибо

09 Май 2013, 22:31
Default_mo

Fever, да не за что)

09 Май 2013, 23:03
Ответить на тему