Поиск

Преобразование строк и массивов

Теперь, когда вы имеете представление и о массивах, и о строках, уместно по говорить о двух функциях для перехода из одного представления в другое. Пер вая функция, implode ( ) , превращает массив в строку. Вторая, explode ( ) , вы полняет обратное действие, разбивает строку и создает массив. Эти функции удобно использовать в целом ряде случаев:

  • иногда необходимо превратить массив в строку для добавления этого зна чения к адресу URL (с массивом это сделать нелегко);
  • порой нужно превратить строку в массив для того, чтобы сохранить ин формацию в базе данных;
  • вам может понадобиться сделать строку массивом, чтобы разбить тексто вое поле с разделителями в виде запятых (скажем, область поиска по клю чевому слову в форме) на отдельные части.

Синтаксис функции explode ( ) выглядит так:

$Array = explode ($Sepa'rator, $String) ;

Разделитель $Separator это строка символов или один символ, обознача ющий конец одного элемента массива и начало другого. В таких случаях гово рят, что разделитель делит строку на поля, которые затем станут элементами массива. Обычно для этого используется запятая или пробел. Код будет выгля деть так:

$Array = explode ( " , " , $Strihg);

Другой возможный вариант:

$Array = explode. (" ", $String) ;

Для обратного преобразования массива в строку необходимо указать разде литель, а все остальное будет сделано автоматически:

$String = implode($Glue, .$Array) ;
$String = implode(",", $Array);

Другой допустимый вариант:

$String = implode(" ", $Array);

Чтобы показать возможное использование функций explode () и implode ( ) , создадим HTMLформу, в которую пользователь вводит строку из имен, разде ленных запятыми. Затем PHPскрипт превратит строку в массив для того, что бы можно было отсортировать список. И наконец, будет создана и возвращена стройа, в которой имена расположены в алфавитном порядке.

Выполнение преобразования

  1. Создайте новый HTMLдокумент в текстовом редакторе.
  2. Напишите стандартный HTMLзаголовок.
  3. <HTMLxHEADxTITLE>HTML Form</TITLEx/HEADxBODY>
  4. Создайте новый HTMLдокумент для ввода текста.
  5. <FORM ACTION="HandleList.php" METHOD=POST>
    Enter the words you want alphabetized with each
    individual word separated by a space:<BR>
    <INPUT TYPE=TEXT NAME="List" SIZE=80xBR>

    В подобных случаях важно дать пользователю подробную подсказку о том, какую информацию требуется ввести. Например, если в качестве разделителя в списке он применяет запятые, то обработать строку соответствующим обра зом будет невозможно (после создания обоих сценариев замените пробелы за пятыми и оцените результаты).

  6. Создайте кнопку Submit, затем закройте форму и HTMLстраницу.
  7. <INPUT TYPE=SUBMIT NAME="SUBMIT" VALUE="Submit!">
    </FORMx/BODYx/HTML>
  8. Сохраните сценарий как list.html (листинг. 7.6) и загрузите его на сервер. Листинг 7.6 т Это простая HTMLформа, куда пользователь может ввести список слов. Включение в форму подробных инструкций разумная практика Webдизайна.
  9. 1 <HTML>
    2 <HEAD>
    3 <TITLE>HTML Form</TITLE>
    4 </HEAD>
    5 <BODY>
    6 <PORM ACTION="HandleList.php" METHOD=POST>
    7 Enter the words you want alphabetized with each individual word
    separated by a space:<BR>
    8 <INPUT TYPE=TEXT NAME="Hst" SIZE=80xBR>
    9 <INPtJT TYPE=SUBMIT NAME="SDBMIT" VALOE="Submit 1">
    10 </FORM>
    11 </BODY>
    12 </HTML>

    А теперь создадим страницу HandleList.php, где будут обрабатываться дан ные, полученные от пользователя из формы list.html.

  10. Создайте новый HTMLдокумент в текстовом редакторе.
  11. Напишите HTMLзаголовок и откройте PHPраздел страницы.
  12. <HTMLxHEADxTITLE>Alphabetizing Example</TITLEx/HEADxBODYx?php
  13. Превратите введенную пользователем и переданную в сценарий строку
  14. $List в массив.
    $Array = explode (" ", $List);

    Эта строка кода создает новый массив $Аггау из строки $List. Каждый про бел между словами в строке $List указывает на конец одного слова и начало следующего. Таким образом, первое слово устанавливается в $Аггау [ 0 ], затем идет пробел в строке $List, затем второе слово устанавливается в $Аггау [ 1 ], и так далее до конца строки.

  15. Отсортируйте массив в алфавитном порядке.
  16. sort ($Array);

    Так как нет необходимости сохранять связь между ключами и значениями в массиве $Аггау, можно использовать функцию sort ( ) вместо asort ( ) , кото рую мы применяли выше. Для очень большого массива это дало бы некоторую экономию времени функция sort ( ) работает немного быстрее

  17. Создайте новую строку из отсортированного массива.
  18. $NewList = implode ("<BR>", $Array); .

    Нам надо распечатать новый список. Но, поскольку распечатать массив не так просто, как строку, сначала преобразуем массив $Аггау в строку $NewList. Новая строка будет начинаться со значения $Аггау [ 0 ], за ним пойдет HTML тэг <BR>, затем значение $Аггау [1], снова тэг <BR> и т.д. Использование тэга вместо пробела или запятой придаст списку более читабельную форму при отоб ражении в браузере.

  19. Распечатайте новую строку в браузере.
  20. print ("An alphabetized version of your list is:<BR>$NewList");
  21. Закройте PHPраздел и HTMLстраницу.
  22. ?></BODYx/HTML>
  23. Сохраните страницу как HandleList.php, загрузите ее на сервер в один ка талог с list.html (листинг. 7.7) и протестируйте оба сценария в браузере (рис.).
  24. Листинг 7.7 т Простые, недейственные функции explode () и implode ( ) по зволяют быстро и легко отсортировать список переданных слов практически любого размера с помощью двух строк кода.

    1 <HTML>
    2 <HEAD>'
    3 <TITLE>Alphabetizing Ехатр1е</Т1ТЬЕх/НЕАВ>
    4 <BODY>
    6 /* Эта страница получает и обрабатывает данные, принятые
    от "list.html". •*/
    7 $Array = explode (" ", $List);
    8 sort ($Array);
    9 $NewList = implode ("<BR>", $Array);
    10 print ("An alphabetized Aversion of your list is:<BR>$NewList");
    11 ?>
    12 </BODY>
    13 </HTML>


    Функция j oin ( ) , которая также возможна в коде, идентична функции implode (). Есть еще несколько функций, имеющих несколько равноправных названийсино нимов. Вы можете использовать то имя функции, которое вам больше нравится