Я думал, что напишу это другим, и менее очевидным способом, к черту.
Нет условий, понимание того, как это работает, - упражнение, оставленное читателю.
$x = array(
'foo ', 'bar ____' , 'baz', 'q-----------', 'doo'
);
function max_str( $stringArray )
{
$m = '_';
foreach($stringArray as $item )
{
$m[ strlen($item) ] = '_';
}
return strlen( $m );
}
print max_str( $x );
Примечание: Установка $m
на значение ""
не работает. Php отстой, и по какой-то причине приводит $m
в массив. Чистый Гений.
Ответ на комментарий
Какой смысл не инициализировать
$ m = 0, а затем в цикле сделать $ m =
max ($ m, strlen ($ item))
Потому что я хотел быть другим. Этот объем ответа был предоставлен. Идея здесь состояла в том, чтобы попытаться «визуально» обработать его, в логическом смысле я пытался максимально приблизиться к логике «распечатать его в динамическом текстовом поле и посмотреть, насколько широка текстовое поле». Единственная проблема здесь состоит в том, что строки не являются двухмерными, поэтому вертикальное наложение «линий» было как можно ближе. То, что я действительно хотел сделать, это что-то вроде
substr( $m , 0 , strlen($item)) = $item;
Но php не имеет значений LVal, и он был бы сложен и использовал бы ужасные циклы для реализации этого, поэтому я просто немного замкнул '_' в позиции $ length.
Конечно, вы можете утверждать, что это неправильный подход к проблеме, но IMO, то, что предпринимается, и идея ее решения в PHP - это тоже неправильный подход к проблеме, поэтому, если я собираюсь что-то сделать неправильно, я также могу быть новаторски неправым в способах, которые могут раскрыть другие странные трюки кодирования.
Кроме того, насколько я вижу, ваша функция будет неправильной для $ stringArray = array ("") ..
Да, незначительное предостережение, которое я должен признать, однако, если у пользователя есть поле с опциями без строк или все строки имеют длину 0, у вас не получится начать с того, что nobodys собирается правильно дать команду, что В этом случае поле параметров слишком велико на 5 пикселей.
Почему все сделано из Fail
Реально, любой алгоритм, который не имеет полноценной карты кернинга символов, сопоставляющей пары символов с эффективным используемым пространством, будет некорректным. Вы хорошо в моноширинном шрифте, но все остальное будет смешно.
- iiiiiiiiii
- LLLLLLLLLL
- OOOOOOOOOO
- ммммммммммы
- iiiiiiiiii
- LLLLLLLLLL
- OOOOOOOOOO
- ммммммммммы
iiiiiiiiii
llllllllll
oooooooooo
mmmmmmmmmm
10 копий каждого, но такое разнообразие использования пространства!