Новини високих технологій
» » PHP: масиви в рядок. Перетворення рядків у масиви і назад

PHP: масиви в рядок. Перетворення рядків у масиви і назад

2-04-2018, 11:00
1 044
Перетворення даних з одного представлення в інше є затребуваним, часто єдиним механізмом розв'язання задачі. Масив є простим випадком об'єкта. Рядок - природне подання інформації для передачі, обробки або зберігання. Досвід і семантика, реалізовані на PHP: масиви, функції та синтаксичні конструкції, що дають можливість створювати оптимальні рішення для обробки інформації в тому вигляді, в якому вона представлена.

Інформація: символи, рядки і дані

В «чистому» вигляді інформація - це рядок символів, мова або послідовність сигналів. У програмуванні фігурують рядки, масиви і об'єкти - це варіанти штучних рядкових конструкцій. Числа - це теж рядка, але цифр, а не символів.


Перетворити рядок в масив PHP дозволяє безліччю різних способів. Є дві спеціальні функції, які роблять це самостійно: $aArr = explode('x', 'string'); $aStr = implode('y', $aArr). Перша функція знаходить символ роздільник 'x' і розбиває по ньому рядок 'string'. В результуючий масив потрапляє рівно таку кількість елементів (рядків), яке міститься між символами 'x'. Символом роздільником не обов'язково може виступати класичні: кома; точка; крапка з комою. Розділяти рядок можна за підрядку або по спеціальному поєднанню символів. Довжина рядка - strlen() на PHP, довжина масиву - count(). У першому випадку вважається кількість символів, у другому випадку кількість елементів. Оскільки символ-роздільник не входить до елементів масиву, то значення count() буде дорівнює кількості роздільників в перетворюваної рядку мінус один.


За зворотної трансформації PHP масиви в рядок перетворюються з символом-роздільником (може бути порожнім), і всі дані (числа та логічні вирази) зливаються в одну рядок. Елементом масиву може бути інший масив, але цей випадок програміст повинен виконати особливо. Функція implode() далека від рекурсії.
У цьому прикладі немає проблем перетворити PHP-масиви в рядок до тих пір, поки серед їхніх елементів не виявиться іншого масиву. При перетворенні асоціативних елементів втрачається ключова інформація. Зокрема, елементи "зливу" і "персик" будуть позбавлені своїх ключів.

Роздільники даних і ключі

Не слід вважати роздільниками крапки, коми, двокрапки тощо-Це приватний випадок поділу даних один від одного. При трансформації рядка на PHP багатовимірний масив не вийде, а асоціативним індексами нізвідки буде взятися. При розбиранні рядка за роздільником завжди виходять рядка. Але це не привід зупинятися на досягнутому. Розібравши один рядок на складові елементи, можна піти далі.
Наприклад, був абзац, в ньому кілька пропозицій (роздільник "." - точка), у реченні кілька фраз (роздільники "," - кома, ";" - крапку з комою "." - точка), у фразі є слова (роздільник "" - пробіл, "," - кома, ";" - крапку з комою "." - точка). При такій розбиранні на PHP багатовимірний масив вийде легко, але алгоритм буде дуже негарним: кількість роздільників зростає, а відсутність зв'язку між сусідніми абзацами гарантовано забезпечить дублювання речень, фраз і слів.
Розбираючи рядка, можна відразу перетворювати послідовності цифр числа, а логічні значення true і false. Але це зокрема, ключова інформація все одно не з'явиться, бо як ключ - це сенс, автоматом можна створити тільки числовий індекс.

Комплексні роздільники

Висновок масиву PHP в рядок часто використовується для службових цілей. Файл конфігурації традиційно записують порядково, а ім'я від значення відокремлює символ одно або двокрапка. При такому вирішенні виведення масиву на PHP робиться в файл, автоматично виходить поділ рядків і при зворотному розпізнаванні легко виходять асоціативні масиви. Читаючи файл, програміст отримує рядка, а розбиваючи кожну рядок за "=" або ":", отримує ім'я і його значення. Дуже затребувана маніпуляція, хоча сучасніше використовувати XML-позначення на тій простій підставі, що крім імен і значень можна зберігати і відновлювати додаткові дані, наприклад, атрибути змінних.
У прикладі з абзацами (наприклад, природний текст для побудови словника або результат парсинга для створення вибірки даних) важлива не конкретна процедура перетворення рядка в масив, а комплексне рішення для всіх абзаців або блоків інформації. Зазвичай таке завдання потребує зворотного рішення, коли сформований «комплект» даних потрібно буде використовувати для пошуку інформації або для складання назад в рядок.

Розбирання і збірка рядків - перевірка даних

На PHP: масиви в рядок - це точне рішення. Якщо вихідна інформація могла мати синтаксичні помилки, зайві прогалини, некоректні символи, то при розбиранні їх не буде. Результат трансформації вихідної інформації за неписаними законами програмування виконується строго формально, і результат буде чітко розкладено по поличках.
Зворотна процедура дозволить створити правильну вихідну рядок. Якщо зіставити об'єм вихідної інформації і результат зворотного перетворення, то можна робити висновки про те, в якому місці були допущені помилки чи сталася втрата даних. На PHP довжина масиву в контексті початкової довжини рядка може дозволити зробити потрібні висновки.

Час, дата і мітки подій

У розробці відповідальних проектів, при створенні об'єктів управління, наприклад, часом або подіями, рядок - це одне подання даних, а масив - це інше. Але у застосуванні вони еквівалентні. Коли потрібно виконати математичні або логічні обчислення, програміст маніпулює масивом, коли потрібно зберегти дані, він використовує рядковий варіант.
Індекси доступу до полів бази даних - реальна практика спільної дії MySQL і PHP, масиви в рядок = один індекс за рядками декількох таблиць бази даних. Якщо база даних містить десяток таблиць, а в кожній таблиці рядки можуть бути обрані за поєднанням імен (значень) у певній комбінації, то сформувавши масиви доступу до рядків, можна згодом мати доступ до них за алгоритмом формування індексу, а не з пошуку в базі даних.

Перетворення масиву в рядок можна розглядати як алгоритм формування потрібного індексу, в той час як вміст масиву формується під управлінням зовсім інших подій або дій користувача.

Злиття масивів

Функції PHP дозволяють вільно маніпулювати масивами. Але завжди виникають завдання зробити вибірку унікальних даних або знайти дані в масиві. Перша задача розв'язується ітераційним шляхом: перебирається масив (або кілька масивів) і формується рядок унікальних значень - очевидне рішення, але не найефективніший. Знайти дані в масиві - теж цикл, а якщо багато елементів, то цикл буде досить довгим і займе помітне час. Можна відправити масив в рядок і за допомогою функції strpos() знайти входження необхідного елемента, але це зумовить проблему виявлення помилкового входження. Наприклад, искалось слово "лоток", а було знайдено його входження в слові "молоток". Позбутися від таких помилок можна, якщо всі елементи масиву зливати в рядок за спеціальним роздільник, що дозволить уникнути невизначеності. Якщо в рядку виявилися "[лоток]" і "[молоток]", то проблем з пошуком не буде. Але немає ніякої гарантії, що на реальних обсягах даних функція strpos() працює швидше циклу, перебирає елементи масиву.

Об'єктне рішення: масиви + рядка

Найкраще рішення, коли масив або рядок самостійно виконує правильне дію. Якщо дещо ускладнити масиви і спростити рядки, адже перші - це приватний випадок об'єкта, а другі - це традиційна серіалізація, то кожен буде займатися своєю справою.
В потрібний момент часу об'єкт - це масив, а коли потрібна рядок, він буде рядком. При цьому зовсім не обов'язково мати в об'єкті і масив і рядок одночасно. Можна побудувати унікальну структуру даних з швидким доступом. А логіку "масив" і "рядок" винести в методи об'єкта. Об'єктно-орієнтований підхід спрощує вирішення багатьох задач обробки рядкової інформації, дозволяє не акцентувати увагу на масивах, циклах і функція обробки рядків самого PHP.

Динаміка сенсу

Як рядки, так і масиви - це реальний сенс реальної дійсності, області застосування, задачі. Немає такого завдання - відправити на PHP масиви в рядок. Але є завдання отримати абзац (речення, словосполучення, слово, число) на базі результатів, отриманих у попередньому алгоритмі.
Попередній алгоритм несе в собі сенс, а точне вираження цього змісту міститься в масиві. Наступний етап алгоритму - трансформація сенсу в інше уявлення, зручний для подальшої обробки або застосування. Розглядаючи алгоритм, як динаміку сенсу і перетворень даних, можна формувати надійні, зрозумілі та ефективні перетворення.
Цікаво по темі
PHP-масив: видалити елемент перший, останній, по значенню
PHP-масив: видалити елемент перший, останній, по значенню
Масиви PHP використовуються повсюдно. Додавання і зміна значень, як правило, не викликає труднощів. Видалення елементів масиву - особлива операція.
Масиви JS: асоціативний масив в рядок, масив об'єктів. JS: видалити елемент масиву
Масиви JS: асоціативний масив в рядок, масив об'єктів. JS: видалити елемент масиву
Масиви та об'єкти jаvascript представлені простим і зручним синтаксисом, можливістю організації стека і рекурсії, дозволяють реалізувати
Приклади застосування методу JavaScript length
Приклади застосування методу JavaScript length
Довжина рядка, числа або іншого елемента скрипта має істотне значення. Особливістю підходу мови jаvascript до поняття довжини є можливість
Об'єкти та масиви PHP: array push & pop
Об'єкти та масиви PHP: array push & pop
Стекова організація даних зручна для створення динамічної функціональності. Масиви на PHP, функції push & pop на перших і останніх елементах
Як визначити кількість елементів у масиві PHP?
Як визначити кількість елементів у масиві PHP?
При використанні масивів має значення кількість містяться в них даних. Особливості синтаксису і логіки мови PHP дозволяють динамічно визначати
Javascript Array для збереження необмеженої кількості змінних
Javascript Array для збереження необмеженої кількості змінних
Логічно масив займає проміжне положення між змінними і об'єктами. Практично не слід надавати особливого значення словам. У програмі є змінні і код.