Свежие комментарии

    Архивы рубрики ‘Функции для работы с массивами’

    Функция array() — Создание массива

    Функция array() - Создание массива

    Массивы в любых языках программирования играют важную роль, т.к. они хранят в себе отсортированные данные, хаотично подобранные или в ручную созданные массивы которые часто имеют структуру ‘ключ’ => ‘значение’. Массив является востребованной структурой для хранения данных. Все ключи массива последовательно пронумерованы от 0 до N. Имена массивов не отличаются от обычных переменных, так же начинаются с знаком $ после которого идет логическое имя для массива. Для того, чтобы получить значение нужно указать ключ в квадратные скобки массива. Допустим у нас есть массив $Cars, нам нужно получить значение первого ключа — $Cars[0], добавляя единицу к ключу массива мы получим следующее значение очередного ключа.

    В качестве значения ключей могут выступать очередные массивы, тем самым создавая многомерные массивы. Для получения значения из многомерного массива мы просто продублируем квадратные скобки $Cars[1][‘bmw’]. В качестве ключа могут быть использованы не только цифры но и буквы.

    Для создания нового массива, в PHP чаще встречаются два способа это использования array() или добавления к переменной квадратных скобок присваивая значение. Рассмотрим каждый из них в отдельности.

    В круглых скобках через запятую можно указать сразу значение без предварительного указания ключа

    <?php
    $Cars = array('bmw', 'audi', 'lexus');
    // Получаем значения из массива
    echo $Cars[0]; // bmw
    echo $Cars[1]; // audi
    echo $Cars[2]; // lexus
    ?>

    Так выглядит одномерный массив из трех ключей пронумерованных 0 до 2. Как уже говорилось выше, значения массива могут быть так же массивы тем самым получая многомерные массивы.

    <?php
    $Cars = array(
    	'bmw' => array('x3', 'x4', 'x5'),
    	'volkswagen' => array('polo', 'golf', 'passat'),
    );
    // Получаем значения из многомерных массивов
    echo $Cars['bmw'][0]; // x3
    echo $Cars['volkswagen'][2]; // passat
    ?>

    Схематическую структуру массива мы можем получить при помощи функции print_r($Cars); текущая схематическая конструкция для созданного двухмерного массива будет

    Array
    (
        [bmw] => Array
            (
                [0] => x3
                [1] => x4
                [2] => x5
            )
        [volkswagen] => Array
            (
                [0] => polo
                [1] => golf
                [2] => passat
            )
    )

    Как вы можете заметить, для первого примера мы не указали ключи для значений, дело в том, что как принято в С-подобных языках программирования если не указать ключи значений они автоматически вставляются начиная с 0 до N, где N (кол-во значений). Порядок следования ключей можно поставить свой, указываем перед знаком => свой номер.

    <?php
    $notebooks = array(3 => 'HP', 4 => 'Asus', 5 => 'Samsung');
    echo $notebooks[4]; // Asus
    echo $notebooks[5]; // Samsung
    ?>

    Создание массивов в квадратные скобки аналогично тому как присваивают значение для перемен. В квадратные скобки указывается ключ массива и после знака = присваивается новое значение.

    <?php
    $Cars[0] = 'bmw';
    $Cars[1] = 'audi';
    $Cars[3] = 'lexus';
    ?>

    Данный пример является аналогом первого примера создания массивов через array() только конструкция немного другая и приходится повторять имя массива.

    Работа с массивами: explode() — разделяй и властвуй

    Работа с массивами: explode() - разделяй и властвуй

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

    Функция занимается разбиванием строки с помощью указанного разделителя.

    explode( $Разделитель, $Строка [, int $Лимит] );

    $Разделитель — Переменная String играет роль разделителя, указанное в ней значение (текст или символ) будет обыскивать содержимое переменной $Строка, на наличие в ней аналогичное ему значение. Если в $Строка будет найдены такие же символы какие указаны в $Разделитель то первая часть «До разделителя» будет один элемент массива и «После разделителя» другой элемент массива.

    $Строка — Любой текст без ограничения который будет подвергнут поиску на наличие в нем эквивалентного значения разделителя. После нахождения в нем текст будет разбит на разные элементы массива.

    $Лимит — Если он задан, разделение строки на элементы массива будет осуществятся только в пределах лимита. Остальной текст который не прошел под ограничение лимитом будет добавлен к последнему значению массива, выводится так же вместе.

    Ознакомимся с примером, у нас есть переменная которая хранит в себе название нескольких футбольных команд которые разделены между собой символом » | «, после разделения афишируем пронумерованные команды в окно браузера.

    <?php
    $FootballTeam = "Реал Мадрид|Барселона|Манчестер Юнайтед|Челси|Милан";
    $Teams = explode("|", $FootballTeam);
    foreach($Teams as $TeamName) {
    	$TeamNumber++;
    	echo $TeamNumber.". ".$TeamName."<br />";
    }
    // Выводим название 1 и 2 команды
    echo $Teams[0]."<br />"; // Реал Мадрид
    echo $Teams[1]."<br />"; // Барселона
    ?>

    Результат выполнения скрипта:

    1. Реал Мадрид
    2. Барселона
    3. Манчестер Юнайтед
    4. Челси
    5. Милан
    Реал Мадрид
    Барселона

    Еще один пример который я часто принимаю в своем скрипте добавления новостей, это разделения содержимого статьи на короткую статью и полную статью. Некоторые вводят текст с начало в поле короткой статьи и уже весь текст в одеяльное поле. Всю рутину процесса можно уничтожить при помощью ББ-кода [cut] он добавляется в тот участок текста где нужно осуществить его разделение.

    <?php
    $FullText = "Текст приведен для примера, тут будет короткая статья которую увидят на главной. [cut] После этого тега следует весь текст статьи который увидит пользователь при нажатии на - Подробнее";
    $Text = explode("[cut]", $FullText);
    // Выводим короткий текст
    echo $Text[0];
    // Остальной текст после тега [cut]
    echo $Text[1];
    ?>

    Функции удобно использовать в парсингах информации, некоторые веб разработчики вместо того, чтобы создавать отельные столбцы в таблице, кладут всю информацию в одну и разделяют данные пробелом между ними. Чаще всего, в качестве данных участвуют числовые значения. Хочу сразу сказать, что такой метод хранения информации очень плох, не поленитесь и создайте логические имена для полей таблиц и храните в них соответствующие названию значения.

    <?php
    // Допустим был запрос в базу данных и мы получили
    // содержимое информации о пользователе `UserData` в соответвующею переменную
    $UserData = "91 2012-03-29 23 1333039451";
    $Data = explode(" ", $UserData);
    echo "ID пользователя: ".$Data[0]."<br />";
    echo "Дата регистрации: ".$Data[1]."<br />";
    echo "Возраст: ".$Data[2]."<br />";
    echo "Последний вход: ".date("d.m.Y H:i:s", $Data[3])."<br />";
    ?>

    Результат работы скрипта:

    ID пользователя: 91
    Дата регистрации: 2012-03-29
    Возраст: 23
    Последний вход: 29.03.2012 19:44:11

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

    Сортировка массивов по возрастанию и убыванию в PHP

    Сортировка массивов по возрастанию и убыванию в PHP

    Рано или поздно необходимость сортировать данные из массива возникает у любого программиста. Будь то вывод данных из базы в алфавитном порядке или сортировка имен файлов по дате последнего изменения, можно осуществить благодаря встроенным php функциям для сортировки данных массива. В данной статье продемонстрирую и объясню в примерах как работают такие функции как: sort(), rsort().

    Функция sort(); — Сортировка массива по возрастанию и по алфавиту

    Структура:

    sort( $Массив, $Флаг );

    Функция сортирует заданный ей массив $Массив по возрастанию. Функция предназначена для работы со списками. Списки это обычные массивы, ключи которых начинаются с нуля. Функции можно задать необязательный аргумент $Флаг, который манипулирует тем как именно должно происходить сортировка. Рассмотрим описание аргумента $Флаг:

    SORT_REGULAR – Сортировка по умолчанию работы функции

    SORT_NUMERIC — Сортировка чисел, по возрастанию

    SORT_STRING — Сортировка строк, по алфавиту

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

    <?php
    $Leasons = array(83, 100, 72);
    sort($Leasons);
    foreach($Leasons as $num) {
    	$palce++;
    	echo "Курс: {$palce} - {$num} пар<br />";
    }
    ?>

    Результат работы скрипта:

    Курс: 1 - 72 пар
    Курс: 2 - 83 пар
    Курс: 3 - 100 пар

    Если бы мы не применили функцию sort(); результат работы был бы следующим:

    Курс: 1 - 83 пар
    Курс: 2 - 100 пар
    Курс: 3 - 72 пар

    Сортировка по алфавиту

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

    <?php
    $Country = array("Россия", "Италия", "Япония", "Армения");
    sort($Country);
    foreach($Country as $name) {
    	echo "{$name}<br />";
    }
    ?>

    Результат работы:

    Армения
    Италия
    Россия
    Япония

    функция rsort(); является алогичной функции sort(); только сортирует массивы по убыванию. рассмотрим структуру синтаксиса:

    rsort( $Массив, $Флаг );

    Пример для данной функции будет похож на примеры выше приведенные, кроме одного, данные из массива будут отсортированы по убыванию. Создаем массив с призами для тех кто займет 1-е, 2-е и 3-е место в конкурсе.

    <?php
    $Money = array(500, 1200, 2800);
    rsort($Money);
    foreach($Money as $num) {
    	$place++;
    	echo "{$place} место - приз: {$num} руб. <br />";
    }
    ?>

    Результат выполнения скрипта:

    1 место - приз: 2800 руб.
    2 место - приз: 1200 руб.
    3 место - приз: 500 руб.

    Работа с массивами: implode() — собираем крошки

    Работа с массивами: implode() - собираем крошки

    Как разделять строку на массивы мы обсудили в прошлой теме explode() — разделяй и властвуй. Функция implode(); склеивает элементы массива и на выход получаем полноценную строку. Если функция explode разделяет строку на элементы массива с помощью разделителя, то функция implode наоборот склеивает строку с помощью указанного символа(клея).

    implode( string $Клей, array $Крошки );

    $Клей — любой текст или символ который послужит в качестве клея между элементами массива $Крошки. Содержимое из переменной $Клей добавится после каждого элемента из массива, кроме последнего.

    $Крошки — Одномерный массив который предстоит превратить в строку разделяя его элементы значением из переменной $Клей.

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

    <?php
    $Notebook = array("Asus", "Samsung", "HP", "Dell");
    $AllNotebooks = implode(", ", $Notebook);
    echo $AllNotebooks;
    ?>

    Результат выполнения скрипта:

    Asus, Samsung, HP, Dell

    В примере работы функции explode, мы разделили статью на короткую и более полную. Теперь, с помощью функции implode мы собираем короткую статью и остальную во едино.

    <?php
    $MyArticle = "Блог live-code.ru наполнен качественными и уникальными статьями о программировании и раскрутке сайта.[cut] Так-же описана работа движка Joomla + и модули к нему.";
    // Разделяем строку на короткую и остальную
    $Article = explode("[cut]", $MyArticle);
    // Выводим содержимое короткой статьи
    echo "Короткая строка: ".$Article[0];
    echo "<br /><br />";
    echo "То, что осталось после разделения: ".$Article[1];
    echo "<br /><br />";
    // Собираем полную статью игнорируя тег [cut]
    $FullText = implode('', $Article);
    echo "Весь текст: ".$FullText;
    ?>

    Результат работы скрипта:

    Короткая строка: Блог live-code.ru наполнен качественными и уникальными статьями о программировании и раскрутке сайта.
    То, что осталось после разделения: Так-же описана работа движка Joomla + и модули к нему.
    Блог live-code.ru наполнен качественными и уникальными статьями о программировании и раскрутке сайта. Так-же описана работа движка Joomla + и модули к нему.

    Функции implode есть альтернатива, её можно заменить с помощью циклов. Цикл читает весь массив и склеивает новые элементы массива к переменной в теле цикла. Минус такого метода в том, что цикл приклеит клей-переменную и после последнего элемента.

    <?php
    $Languages = array("PHP", "C++", "Python", "Java", "Ruby");
    $IWantToLearn = 'Я хочу выучить: ';
    foreach($Languages as $Language) {
    	$IWantToLearn .= $Language.', ';
    }
    echo $IWantToLearn;
    ?>

    Результат работы скрипта:

    Я хочу выучить: PHP, C++, Python, Java, Ruby,

    Как видите после ‘Ruby’ у нас добавилась ненужная запятая, такая альтернатива функции слишком большая и загрязняет код. Так, что учите PHP функции и не придумывайте велосипед.