Масиви PHP використовуються повсюдно. Додавання і зміна значень, як правило, не викликає труднощів. Видалення елементів масиву - особлива операція. Можна просто видалити елемент, а можна видалити і використовувати. Цей нюанс дає великі можливості.
Масиви PHP
PHP - це сучасна мова програмування, функціональність в частині роботи з масивами виконана на високому рівні. Програміст має можливість використовувати звичайні і асоціативні масиви, проектувати багатовимірні структури даних, мати в якості елементів масиву значення будь-якого типу.
Є розвинутий набір функцій по роботі з масивами, спеціальні синтаксичні конструкції. Є можливість обходити масив за своїм алгоритмом і призначати власні функції обробки.
Приклади створення і використання масиву
Функція scPrint - допоміжна. Вона рекурсивно записує масив в рядок символів для демонстрації отриманих результатів. Масив $aFruits створюється звичайним чином: перераховуються значення, індекси призначаються автоматично з нуля. Остання кома не має значення і не призводить до створення ще одного порожнього елемента. Масив $aData створюється порожнім, потім в нього вносяться значення. Три - автоматом, а два - з асоціативними індексами, які не впливають на загальну нумерацію значень. Так, елементи 'сливовий' і 'персик' мають індекси 'нова' і 'свіжий' відповідно. Масив $aInfo - багатовимірний та асоціативний.
Як в PHP-масиві видалити елемент, показують три операції видалення. Перша операція видаляє другий елемент з масиву $aFruits, у нього індекс дорівнює 1. Слід зазначити, що наступні за ним індекси не зсуваються, значить, у циклічних операціях з таким масивом слід передбачити перевірку існування елемента.
Друга операція - видаляє останній і перший елементи в масиві $aData, що підтверджує відсутність впливу на видалення індекси і можливість одночасного видалення кількох елементів. Третя - видаляє масив в масиві і елемент в масиві, що входить в інший масив.
Звичайне видалення елементів - unset
Функція unset видаляє. Неважливо, що. Це може бути просто змінна або елемент масиву. Вважається, що unset() - це оператор мови, а не функція. Ніякого значення цей оператор не повертає, а те, що йому передано в якості параметрів, що він «руйнує». Змінна або масив зникають, наче їх не було.
На PHP видалити порожні елементи масиву можна по-різному, власне, що вважати порожнім елементом - залежить від програміста. Однак не надто розумно використовувати для цього кілька параметрів в операторі unset(). Практичніше групові операції виносити в групові функції. Сучасні комп'ютери дуже швидко працюють, а PHP дуже скоро. Але це не привід створювати і обробляти тонни інформації громіздкими алгоритмами, це об'єктивне підґрунтя підійти до процесу видалення елементів масиву прогресивними способами.
Видалення елементів малими методами
На PHP видалити порожні елементи масиву можна оптом, перетворивши масив в рядок і повернувши його назад. Але цей випадок годиться тільки для реально порожніх елементів, пропущених індексів або з метою переіндексації масиву.
Поняття порожнього елемента залежить від завдання. Часто стає порожнім існуючий елемент масиву, в якому містяться певні відомості. Наприклад, у масиві ведеться облік відвідувачів. Елемент масиву містить: час приходу відвідувача; поточний режим роботи; активну сторінку; час останнього дії. Якщо різниця між часом приходу і часом дії останнього становить більше 1 хвилини (або інше значення), можна вважати, що клієнт залишив сайт. Записи про таких клієнтів можна видалити, якщо стоїть завдання моніторити список активних відвідувачів та не використовувати більш досконалі методи з використанням jаvascript. Однак «рядкова» обробка хороша. Наприклад, на PHP видалити повторювані елементи масиву можна так:
Швидкий і доступний спосіб. Необов'язково використовувати символи '[' и ']' для позначення кожного елемента, але слід пам'ятати, що, трансформуючи масив в рядок, потрібно дотримати вимогу унікальності кожного його елемента. Символи для обрамлення слід вибирати з урахуванням символи, які допустимі в елементі. Непорушне правило: кожен елемент масиву в рядку унікальний і має своє місце (інакше нічого не повернути назад). Цей спосіб зручніше, коли стоїть завдання на PHP видалити елемент масиву за значенням. Можна використовувати функцію array_flip і поміняти значення і ключі місцями, потім зробити класичний unset. Можна використовувати функцію array_search і знайти ключ значення, яке потрібно видалити. Але рядковий варіант вирішення наочніше і простіше.
Про розмірностях і розмірах
PHP практично ні в чому не обмежує розробника: ні в кількості вимірів, ні у розмірах елементів. Сенсу захоплюватися цим немає. Кожен елемент повинен бути мінімально можливої довжини, а кількість вимірів повинна прагнути до одиниці. Якщо кількість розмірностей масиву більше трьох - це вагома підстава переглянути рішення. Якщо елемент масиву має довжину більше 4000-8000 символів, повинні виникати сумніви в розумності побудованої картини даних.
Це думка не випливає з контексту функціональності PHP-масиву: видалити елемент, додати об'єкт іншого типу, змінити щось одне на щось зовсім інше. Простота - запорука успіху не тільки в житті, але і в алгоритмі. Програма повинна працювати, а не дивувати своїми розмірності, розмірами і масштабами ідей. Важливий результат, а не грандіозна ідея.
Стекова ідея на PHP
Як сучасна мова програмування PHP не проходить повз рекурсії і стека. Принципово неважливо, що має на увазі програміст, коли використовує функцію array_pop() в PHP: видалити останній елемент масиву або просто отримати його в якусь змінну. Але слід мати на увазі, що в даному контексті функція array_pop - це зі сфери push & pop, тобто це інструменти стека, а не видалення.
Тут прийнято говорити не «видалити», а «витягти». Семантика істотно відрізняється. Проте функція array_shift() в PHP: видалити перший елемент масиву або витягнути його - має інший відтінок. Тут також елемент витягується в зовнішню змінну, і його не буде в масиві, але індекси зміщуються. При отриманні першого елемента з масиву всі слідували за ним елементи зміщуються вперед, але змінюються тільки числові індекси, малі залишаються незмінними.
Видалити або змінити: історія операцій
Змінна - це дуже давнє минуле, масив - це вже давно було, об'єкт - це було вчора. Про об'єктно-орієнтованому програмуванні ще поки що лише говорять, але нічого не використовують на повну силу. Рідкісний випадок, коли поверхневі рішення стали предметом захоплених рішень і «навчених» масою «тіла» систем управління сайтами (CMS).
Об'єктивне правило: не в кількості коду вся справа, а в його якості! Але ніяка сучасна CMS до цього правила ще не прислухалася. Її автори вважають, що вони чинять правильно і знають, що роблять. Результат (характерна риса): ні одна із сучасних CMS не відрізняється пристойною «фігурою» (стрункістю і легкістю конструкцій), всі мають неосяжної повнотою коду, кожна потребує до себе поваги: високої кваліфікації програміста; потребує інсталяції; пред'являє вимоги до хостингу; створює труднощі при переїзді на інший хостинг; реально гальмує в роботі та адмініструванні. Програмісти дуже довго йшли до поняття відкату, сучасне програмування не мислить створення програмного забезпечення без двох функцій: undo; redo. Не тільки людині властиво помилятися, але в будь-якій ситуації відкат повинен бути. В сучасних засобах інтернет-програмування донині цей момент не тільки не має значення, але і застосовується в дуже обмежених масштабах. Операції PHP на масиві: видалити елемент, змінити тип або додати щось нове - зрозумілі. Але раніше були змінні, потім масиви, потім об'єкти. Хіба не привід задуматися про те, що масив - це просто мінлива протягом часу? Масив - це структура даних протягом часу. Жодна мова донині не розглядає час як фактор синтаксису. Про семантику можна навіть не говорити: з найдавніших часів донині програмісти і користувачі розуміють тільки файли і папки. Максимум до чого дійшло розвиток, наприклад, на PHP простір імен (namespace) банально відображається на структуру папок і файлів. У цьому контексті банальні дії в PHP на масиві: видалити елемент, змінити або додати - вимагають від програміста додаткових дій. Можна все залишити, як є, і вийде, як завжди. Можна враховувати кожну операцію на даних і фіксувати її в повному обсязі, створювати і зберігати історію операцій.
Це буде зовсім інший рівень роботи і кардинально кращу якість результату.