/ / PHP: масив в масиві. Пошук в масиві PHP

PHP: масив в масиві. Пошук в масиві PHP

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

Синтаксис стабільний, але змінюється від версії доверсії і не завжди може бути сумісним навіть від низу до верху. Переносимість програм - добре забуте досягнення минулого століття. Семантика розвивається і завжди може бути застосована не тільки в будь-якої версії будь-якої мови; стало традицією використовувати синтаксичні конструкції для вираження того, що правилами мови навіть передбачено не було. На прикладі масивів це можна зрозуміти найбільш просто.

конструювання масивів

Масив в PHP має зручний синтаксис і функціональність. Цей тип даних можна описати попередньо, але часто зручно створювати масиви на льоту в міру необхідності.

public $ aNone = array (); // масив описаний і нічого не містить

public $ aFact = array ( "авокадо", "персик", "вишня"); // в цьому масиві три елементи

Створення масиву в процесі перевірки будь-якої умови:

$ CSrcLine = "рядок аналізованих даних";

for ($ i = 0; $ i <13; $ i ++) {

$ CUserLine = inputUserLine (); // введення чогось

if (checkFunc ($ cSrcLine, $ cUserLine) {

$ AResult [] = "Yes"; // додати в масив PHP

} Else {

$ AResult [] = "No";

}

}

В результаті виконання даного прикладу створитьсямасив з 13 елементів, значеннями якого будуть тільки рядка "Yes" або "No". Елементи отримають індекси від 0 до 12. Той же ефект можна отримати, попередньо записавши "майбутній" PHP-масив в рядок:

$ CFutureArray = "";

for ($ i = 0; $ i <13; $ i ++) {

$ CUserLine = inputUserLine (); // введення чогось

if ($ i> 0) {$ cFutureArray. = "|"; }

if (checkFunc ($ cSrcLine, $ cUserLine) {$ cFutureArray. = "Yes";

} Else {$ cFutureArray. = "No"; }

}

$ AResult = explode ( "|", $ cFutureArray);

php масив в рядок

багатовимірні масиви

Багато системи управління сайтами (СМС)використовують масиви «з розмахом». З одного боку, це хороша практика, з іншого боку, це ускладнює застосування. Навіть якщо автору зрозуміла доктрина "PHP-масив в масиві", то не слід їй зловживати: не тільки розробнику доведеться звикати до складної нотації. Часто через час сам творець буде довго згадувати, що писав спочатку:

return array (

"View_manager" => array (41, "template_path_stack" => array (__DIR__. "/../view",),

"Router" => array ( "routes" => array ( "sayhello" => array (

"Type" => "ZendMvcRouterHttpLiteral",

"Options" => array ( "route" => "/ sayhello", "defaults" => array (

"Controller" => "HelloworldControllerIndex", "action" => "index",))))),

"Controllers" => array ( "invokables" => array (

"HelloworldControllerIndex" => "HelloworldControllerIndexController"))

);

Це зразок практики «PHP-масив в масиві» від ZF2. Чи не занадто надихає спочатку, але це працює і, можливо, робить даний фреймворк успішним (приклад з модуля ZendSkeletonApplication / module / Helloworld / config / module.config.php).

видалити елемент масиву php

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

Просто, доступно і зрозуміло

Створюючи на php масив в масиві, найкращеобмежуватися двома-трьома рівнями. Незважаючи на стабільність і надійність PHP припускається помилок при обробці синтаксичних конструкцій. З цим миритися можна, маючи хороший редактор коду, звикнувши точно вважати дужки і коми. Однак PHP не контролює типи даних (це карма сучасного програмування) і дозволяє розробнику практикувати семантичні помилки.

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

У PHP є суттєва негативна риса: при виникненні невизначеності скрипт просто зависає. Не всі отладчики справляються з непередбаченими обставинами, і багато що залежить від досвіду і інтуїції розробника. Чим простіше алгоритм, чим доступніше структурована інформація, тим більше шансів знайти помилку або зовсім не допустити її.

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

Прості і асоціативні масиви

Запис двовимірного масиву - це ще одна парадужок "[" і "]", наприклад: $ aSrcData [1] [2] означає звернення до елементу [2] масиву [1], що входить в масив $ aSrcData. У PHP немає вимоги оголошувати заздалегідь дані. Любою заявлену інформацію завжди можна перевірити на предмет існування.

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

$ AAnketa [ "name"] = "Іванов";
$ AAnketa [ "age"] = 42;
$ AAnketa [ "work"] = "Директор";
$ AAnketa [ "active"] = true;
$ ATable [] = $ aAnketa;

$ AAnketa [ "name"] = "Петров";
$ AAnketa [ "age"] = 34;
$ AAnketa [ "work"] = "Менеджер";
$ AAnketa [ "active"] = true;
$ ATable [] = $ aAnketa;

$ AAnketa [ "name"] = "Афанасьєв";
$ AAnketa [ "age"] = 28;
$ AAnketa [ "work"] = "Робочий";
$ AAnketa [ "active"] = false;
$ ATable [] = $ aAnketa;

$ SOne. = Implode ( ";", $ aTable [1]). "<br/>"; // другий PHP-масив в рядок
$ SOne. = $ ATable [1] [ "work"]; // звернення до одного елементу другого масиву

Результат роботи цього прикладу (перший масив - звичайний, ключі в ньому починаються з 0, другий масив - асоціативний, в ньому чотири ключа: "name", "age", "work", "active"):

$ SOne = "Петров; 34; Менеджер; 1 <br/> Менеджер";

На цьому простому прикладі можна бачити, якстворена анкета може бути застосована до всіх співробітників. Можна створити масив співробітників з індексами по табельною номерами і, якщо потрібен буде конкретний співробітник, то вибрати його по табельної номером.

Якщо в організації є підрозділи, або єсезонні робітники, або потрібно окремо виділити працюючих пенсіонерів, ... конструкція "PHP-масив в масиві" дуже зручна, але ніколи не слід захоплюватися розмірністю. Два-три виміри - межа для ефективного вирішення.

пошук в масиві php

Ключі для роботи з масивами

Якщо раніше мало значення, як все влаштовано, тов останні роки традиції бінарної епохи, коли програміст хотів знати, як саме зберігаються елементи масиву, і бажав мати до них прямий доступ, забулися остаточно. З'явилося багато кодувань символів, які займають в пам'яті далеко не один байт. Слово "біт" можна зустріти тепер хіба що в операціях битового пошуку, але пошук в масиві PHP - це окрема тема. Доступ до елементів може бути простим і асоціативним. У першому випадку елементи масиву (мають будь-який з доступних в PHP типів) нумеруються 0, 1, 2, ... У другому випадку програміст вказує власний індекс, іменований частіше "ключ" для доступу до потрібного значення.

$ ALine [ "фрукт"] = "апельсин"; // тут PHP-ключ масиву = "фрукт"

або (щоб все було коректно з дотриманням кодування сторінки і коду):

$ ALine [iconv ( "utf-8", "CP1251", "фрукт")] = iconv ( "utf-8", "CP1251", "апельсин");

При додаванні до масиву $ aLine нового значення:

$ ALine [] = iconv ( "utf-8", "CP1251", "персик");
$ ALine [iconv ( "utf-8", "CP1251", "овоч")] = iconv ( "utf-8", "CP1251", "огірок");
$ ALine [] = iconv ( "utf-8", "CP1251", "баклажан");

в результаті виконання циклу:

foreach ($ aLine as $ ck => $ cv) {
$ COne. = $ Ck. "=". $ Cv. "<br/>";
}

буде отримано:

фрукт = апельсин
0 = персик
овоч = огірок
1 = баклажан

PHP-ключ масиву при додаванні елементів "персик" і "баклажан" формується послідовно від 0, а при вказуванні його значення буде дорівнює цьому значенню.

Видалення елементів з масиву

php видалити масив

Найпростіше видалити елемент масиву PHP в ходійого обробки. В цьому випадку, наприклад, в результаті виконання циклу, вихідний масив проглядається, і формується новий, в який непотрібні елементи просто не записуються.

Можна зробити простіше. Якщо до останнього наприклад застосувати:

unset ($ aLine [0]); // видалити елемент масиву PHP

то результат буде:

фрукт = апельсин
овоч = огірок
1 = баклажан

Варіантів маніпулювання елементами масивівможна сконструювати безліч. Наприклад, використовуючи функції: implode () і explode (), можна записати PHP-масив в рядок з одним роздільником, а розібрати назад в інший масив - по іншому разделителю.

Щоб просто на PHP видалити масив цілком, досить написати: unset ($ aLine);

Цього достатньо.

Пошук в масиві

PHP містить спеціальні функції пошукуarray_keys (), array_values ​​(), array_key_exists (), і in_array (), однак перш ніж вирішити їх використовувати, слід розглянути можливість виконати пошук в масиві PHP власними силами.

php ключ масиву

Будь-який проект є конкретна предметна область,сконструйовані масиви, особливо коли частина семантики перенесена в синтаксис і представлена ​​набором цілком конкретних осмислених ключів. Це дозволяє виконувати власні функції пошуку, які також можна позначити осмислено.

В PHP можна викликати функції, ім'я яких визначається в ході виконання програми. Дуже практичний приклад з бібліотеки PHPWord, яка дозволяє читати і створювати документи MS Word:

$ Elements = array ( "Text", "Inline", "TextRun", "Link", "PreserveText", "TextBreak",
"ListItem", "ListItemRun", "Table", "Image", "Object", "Footnote",
"Endnote", "CheckBox", "TextBox", "Field", "Line");

$ Functions = array ();

for ($ i = 0; $ i <count ($ elements); $ i ++) {
$ Functions [$ i] = "add". $ Elements [$ i];
}

В результаті масив $ functions отримає значення масиву $ elements, тобто імена реальних функцій, які виконують роботу з реальними елементами документа.

Викликаючи для $ elements [4] функцію $ functions [4], можна отримати ідеальний пошук і швидкий результат.

Сортування елементів

Завдання сортування даних має важливе значення, іPHP пропонує кілька функцій для цього: sort (), rsort (), asort (), ksort (), ... За зростанням і спаданням елементів другі дві функції зберігають відносини між ключами і значеннями. Іноді має сенс перемішати значення масиву випадковим чином - shuffle ().

php значення в масиві

Використовуючи функції PHP для сортування, не слідзабувати, що елементи можуть мати не тільки різний тип, але і не зовсім природний вміст. В першу чергу потрібно дуже уважно ставитися до сортування рядків, що містять російські букви, сортуванні дати, а також чисел, які записані в різних форматах.

php масив в масиві

Кращий спосіб написати самостійно ідеальне рішення, в усякому разі на етапі тестування скрипта, - це ручне сортування. Вона допоможе передбачити непередбачені ситуації.

рядкові масиви

Завдяки функціям implode () і explode () масивможна легко трансформувати в рядок і отримати назад. Це дозволяє зберігати дані в компактному поданні і розгортати їх у зручний стан у міру потреби.

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

$ CSrcLine = "Text Text ListItemRun TextBox ListItem TextBox Check Box CheckBox TextBox Footnote";

$ ASrc = explode ( "", $ cSrcLine);
$ CDstLine = "";

for ($ i = 0; $ i <count ($ aSrc); $ i ++) {
$ CFind = "[". $ ASrc [$ i]. "]";
if (! is_integer (strpos ($ cDstLine, $ cFind))) {
$ CDstLine. = $ CFind;
}
}
$ ADst = explode ( "] [", $ cDstLine);

$ COne = implode ( ";", $ aDst);

В результаті змінна $ cOne отримає тільки ті значення з початкового рядка, які там зустрічаються по одному разу: "Text; ListItemRun; TextBox; ListItem; Check; Box; CheckBox; Footnote".

Російська мова в ключах і значеннях

Не рекомендується використовувати нічого, що пов'язаноз національними кодуваннями, в синтаксичних конструкціях. Російська мова, як і всі інші мови, символи яких виходять за межі a-z, не створюватиме проблем, перебуваючи в області даних, але не в синтаксисі коду. Іноді навіть просте завдання на PHP «вивести масив на принтер або на екран» призведе до "кракозябрами", а частіше просто зупинить скрипт.

PHP - лояльний мову і терпимо ставиться донаціональним кодувань, але існує маса ситуацій, коли виконаний обсяг робіт доводиться робити повторно тільки тому, що в потрібному місці і в потрібний час вискочить ключове значення, розпізнати яке буде неможливо.

Синтаксис PHP і оточення мови

Слід пам'ятати, що синтаксис PHP - це одне, алеконструкції цього синтаксису «мають справу» з іншими додатками, з операційною системою, з апаратними опціями. Варіантів багато, передбачити все ніколи не представляється можливим.

Правило «в коді є тільки код, а на вході,всередині, і на виході є будь-яка інформація »допоможе уникнути непередбачених несподіванок. PHP-значення в масиві може бути «російським», але ключ на нього повинен бути синтаксично коректним не тільки з позицій даного мови, а й з позицій середовища його роботи.

Ще почитайте: