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

    Архивы за Апрель, 2014

    Функция 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

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