Это не обязательно зависит от PHP, хотя я использую PHP. Я думаю, я ищу творческое решение.
Скажем, у меня есть список терминов в текстовой области, которые разделены дополнительной новой строкой, например:
Cookie
Apple
Banana
Я хочу отсортировать () эти термины и отобразить их после отправки страницы, чтобы результаты выглядели так:
Apple
Banana
Cookie
и не как
Apple
Banana
Cookie
(которому предшествуют две пустые строки)
У кого-нибудь есть предложения о том, как это возможно?
Извините, мне следовало быть более ясным. Список в текстовой области вводится пользователем, поэтому он может содержать или не содержать дополнительные символы новой строки.
Если всегда есть две новые строки, то это так же просто, как расщепление, сортировка и объединение:
$result = explode("\n\n", $text);
sort($result);
$result = implode("\n\n", $result);
Если это может быть один или несколько символов новой строки, то:
preg_match_all("/^(.+$)(\n+)?/m", $text, $matches);
sort($matches[1]);
$result = '';
foreach($matches[1] as $key => $val) {
$result .= $val . $matches[2][$key];
}
$matches[1]
и завершающие символы новой строки (если есть) $matches[2]
$matches[1]
$matches[1]
и добавьте соответствующие новые строки (если есть) $matches[2]
Включая символы новой строки, каждый массив должен иметь нечетное количество элементов, поэтому целочисленное значение array.length / 2 должно всегда давать число строк новой строки, а также индекс первого слова на языке с 0 индексами.
Для количества слов в массиве (т.е. от array.length / 2 до конца массива, исключая) вы можете напечатать слово и напечатать все, что находится в индексе слова — array.length / 2, которое должно быть перевод строки, до последнего слова. Новая строка не должна быть напечатана позже, если индекс имеет последнее слово.
Вы можете сделать это, сначала используя встроенный PHP explode()
функция для извлечения массива из вашей строки в вашей текстовой области, используя 2 символа новой строки между элементами списка (один для перемещения на новую строку из строки, где находится фактический текст, а другой для пустой строки после) в качестве разделителя взорваться дальше. Сортируйте этот массив, а затем восстановите из него вашу строку, добавив вручную новые строки.
Функция ниже демонстрирует, как это достигается и МОЖЕТ БЫТЬ ПРЯМО применимо к вашим потребностям, иначе направит вас в правильном направлении:
function sort_list_with_line_breaks($list_string){
$return_list = '';
// Break the string on newline followed by blank line into array
$list_array = explode("\n\n", $list_string);
// Apply your sorting
sort($list_array);
// Reconstruct string
$count = 0;
foreach($list_array as $string){
if($count == count($list_array)){ break; }
if($count != 0){ $return_list .= "\n\n"; }
$return_list .= $string;
$count++;
}
return $return_list;
}