Использование многомерных массивов в PHP. Массивы в примерах Php заполнить многомерный массив




На уроке будут рассмотрены возможности по работе с массивами в php, объявление массива, виды массивов: многомерные и ассоциативные массивы

  1. Массивы с числовыми индексами
  2. $fruits="яблоко"; $fruits="груша"; $fruits="апельсин"; $fruits="абрикос";

    Данный вариант инициализации массива сегодня практически не используется. Используется следующий вариант работы с массивами:

  3. Ассоциативный массив
  4. Данный вариант создания массива использует объект array:

    $fruits = array(1 => "яблоко", 2 => "груша", 3 => "апельсин", 4 => "абрикос"); // Начиная с версии PHP 5.4 $fruits = array[ 1 => "яблоко", 2 => "груша", 3 => "апельсин", 4 => "абрикос" ];

    Доступ к элементам массива

    1 2 3 4 5 6 7 8 $fruits [ 0 ] = "яблоко" ; $fruits [ 1 ] = "груша" ; $fruits [ 2 ] = "апельсин" ; $fruits [ 3 ] = "абрикос" ; echo "Первый элемент массива - " . $fruits [ 0 ] . "
    " ; echo "Второй элемент массива - " . $fruits [ 1 ] . "
    " ; echo "Третий элемент массива - " . $fruits [ 2 ] . "
    " ;

    $fruits="яблоко"; $fruits="груша"; $fruits="апельсин"; $fruits="абрикос"; echo "Первый элемент массива - ". $fruits ."
    "; echo "Второй элемент массива - ". $fruits ."
    "; echo "Третий элемент массива - ". $fruits ."
    ";

    Результатом выполнения программы будет:

    Важно: В качестве индекса элемента в ассоциативном массиве может быть не число, а слово (тип string )

    Рассмотрим пример:

    Пример: Создать массив student со значениями имен, фамилий и возраста студентов. Вывести на экран значения элементов массива

    $student = array("Name" => John, "Surname" => Smith, "Age" => 20); echo "имя пользователя " . $student["Name"] . "


    ";

    $student["Name"] = "John"; $student["Surname"] = "Smith"; $student["Age"] = 20; echo "имя пользователя " . $student["Name"] . "
    "; echo "фамилия пользователя " . $student["Surname"] . "
    "; echo "возраст пользователя " . $student["Age"] . "
    ";

    Результат:

    Важно: Строковые ключи (индексы) нужно всегда заключать в кавычки

    Индексированные массивы без ключа:

    Также следует учесть, что индексы в массиве вообще можно не писать при инициализации массива значениями. Тогда мы создаем так называемый массив-коллекцию (объект-коллекцию ):

    $student = array ("John" , "Smith" , 20 ) ;

    $student = array("John","Smith", 20);

    В таком случае интерпретатор сам присвоит им числовые индексы, начиная с 0

    Пример преобразования типов и перезаписи элементов.
    Обратите внимание на использование процедуры var_dump()

    1 2 3 4 5 6 7 8 9 "a" , "1" => "b" , 2 => "c" , 2 => "d" , ) ; var_dump ($my_array ) ; ?>

    "a", "1"=> "b", 2 => "c", 2 => "d",); var_dump($my_array); ?>

    Результат:

    Array(3) { => string(1) "a" => string(1) "b" => string(1) "d" }

    Пример использования многомерного массива и организации доступа к его элементам

    1 2 3 4 5 6 7 8 9 10 11 12 "1" , 2 => 2 , "multi" => array ( "1_1" => "1_1" ) ) ; var_dump ($array_odnom [ "first" ] ) ; var_dump ($array_odnom [ 2 ] ) ; var_dump ($array_odnom [ "multi" ] [ "1_1" ] ) ; ?>

    "1", 2 => 2, "multi" => array("1_1" => "1_1")); var_dump($array_odnom ["first"]); var_dump($array_odnom ); var_dump($array_odnom ["multi"]["1_1"]); ?>

    Результат:

    String(1) "1" int(2) string(3) "1_1"

    Пример: создать двумерный массив размерностью 3 х 2. Заполнить его значениями для первой строки: «1_1», «1_2», «1_3»; для второй строки: «2_1», «2_2», «2_3». Вывести на экран первый элемент массива


    Выполнение:
    1 2 3 4 5 6 7 8 9 10 11 12 $array_odnom = array ( 1 => array ( 1 => "1_1" , 2 => "1_2" , 3 => "1_3" ) , 2 => array ( 1 => "2_1" , 2 => "2_2" , 3 => "2_3" ) , ) ; echo $array_odnom [ 1 ] [ 1 ] ;

    $array_odnom = array(1 => array(1 => "1_1", 2 => "1_2", 3 => "1_3"), 2 => array(1 => "2_1", 2 => "2_2", 3 => "2_3"),); echo $array_odnom;

    Задание php2_1: создайте двумерный массив 3 х 3 — верхний левый угол таблицы умножения Пифагора(1, 2, 3; 4, 6, 8 …)



    Лабораторная работа:
    Допустим, у Вас есть какое-то объявление и несколько разных людей, которым нужно это объявление отправить. Для этого Вы делаете заготовку с содержанием объявления, внутри которого есть ряд изменяющихся параметров: массива имен людей и массив событий. Вывести один вариант итогового объявления на экран. Для задания массивов использовать и ассоциативный массив.

    Используйте шаблон объявления и ориентируйтесь по цветам:

    Красным – массивы.
    Коричневым – числовая переменная.
    Синим – константа.

    Уважаемый (ая), Иван Иванович !
    Приглашаем Вас на день открытых дверей .
    Дата события: 12 мая.
    С уважением, Василий.


    Дополните код:
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 // объявление константы define ("SIGN" , "С уважением, Вася" ) ; // массив для имен адресатов $names = array (... ) ; // массив для событий $events = array ( "op_doors" => "день открытых дверей" , "vistavka" => "выставку" , ... ) ; $str = "Уважаемый(ая), $names !
    "
    ; $str .= ...; $str .= ...; echo ...;

    // объявление константы define("SIGN","С уважением, Вася"); // массив для имен адресатов $names = array(...); // массив для событий $events = array("op_doors" => "день открытых дверей", "vistavka" => "выставку", ...); $str = "Уважаемый(ая), $names!
    "; $str .= ...; $str .= ...; echo ...;

Продолжаем изучение массивов. В прошлых статьях мы уже научились объявлять массивы; разобрались: для чего они нужны и где могут использоваться; познакомились с многомерными и ассоциативными массивами. Теперь самое время поговорить о переборе элементов массива.
Зачастую бывает необходимо перебрать все элементы массива и проделать с ними какое-либо действие.

Делать это можно по-разному: при помощи циклов и без. Например, в прошлой статье мы получали все ключи ассоциативного массива, перебирали и выводили их при помощи цикла foreach . Там мы не стали останавливаться на теме перебора элементов массива при помощи цикла, потому что это достойно отдельной темы.

Сегодня, как раз, мы и поговорим о том, как можно перебирать элементы массива. Вы познакомитесь с достаточным количеством новых функций. Ну что ж, давайте начнем!

Для начала поговорим о переборе элементов массива при помощи циклов.

Для этого используются 3 вида циклов for, foreach и while .

Перебор элементов массива. Цикл for()

Для перебора элементов массива-списка, можно сделать следующее:

1. Сначала мы объявляем сам массив;

3. После объявляем цикл for , где в круглых скобках устанавливаем счетчик (объявляется переменная «i» со значением ноль, если эта переменная меньше общего числа элементов массива, то каждую итерацию значение «i» будет увеличиваться на единицу);

4. А в теле цикла уже можно прописать, что делать с каждым элементом массива. Можно, например, просто вывести их на экран.

Все вышеперечисленное иллюстрирует следующий код:

"; } ?>

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

Цикл for и ассоциативные массивы

А вот для перебора элементов ассоциативного массива такой способ уже не подойдет по той простой причине, что индексами ассоциативного массива являются не числа, а строки.

Чтобы перебрать элементы ассоциативного массива в цикле for можно воспользоваться следующей конструкцией:

" .$Mass[$key] . "
"; } ?>

Как видите, мы объявили ассоциативный массив.

reset() – устанавливает указатель на первый элемент массива;

next() – перемещает указатель на один элемент массива вперед;

key() – возвращает ключ текущего элемента массива.

А потом в теле цикла мы выводим индекс элемента массива, стрелку и значение элемента массива. Каждую пару индекс-значение выводим с новой строки.

Также вместо reset() можно использовать end() , тогда указатель будет установлен на последний элемент массива. Но в таком случае нужно и вместо next() использовать prev() , чтобы перемещать указатель не вперед, а назад.

Так мы можем перебрать элементы ассоциативного массива в обратном порядке.

Как Вы, наверное, знаете, цикл for используется далеко не только для работы с массивами.

А вот следующий цикл, который мы рассмотрим применяется как раз исключительно для работы с массивами.

Перебор элементов массива. Цикл foreach()

Цикл foreach() позволяет нам работать как с обычными массивами-списками, так и с ассоциативными.

Вот пример работы цикла для перебора элементов простого массива-списка с выводом всех значений элементов массива на экран.

"; } ?>

В итоге на экране мы увидим все значения элементов этого массива.

Для ассоциативного массива эта конструкция останется точно такой же (за исключением, конечно, что в начале мы объявим не массив-список, а ассоциативный массив) и опять же мы увидим на экране все значения элементов массива.

А вот если мы захотим вывести на экран не только значения элементов, но и их ключи (Вы помните, что у ассоциативных массивов индексы представляют собой строковое значение), то данный цикл нужно будет немного усовершенствовать.

$value) { echo $key . "=>" . $value . "
"; } ?>

И в данном случае мы увидим на экране пару: ключ – значение, между которыми будет стрелка.

Перебор элементов массива. Цикл while()

Еще один цикл, который мы можем использовать для перебора всех элементов массива – это цикл while() .

При этом нам помогут еще две функции, которые мы будет использовать совместно с этим циклом. Это функции list() и each() .

В случае с массивами-списками мы будем использовать данный цикл - вот так:

"; } ?>

Наверное, Вы уже догадались, что на экране мы увидим значения элементов массива.

Здесь функция each() возвращает текущий элемент массива, а после перемещает указатель.

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

" . $value . "
"; } ?>

Вот так мы получим и ключи и значения.

Перебор элементов массива без использования циклов

Можно осуществлять перебор элементов массива и без использования циклов. Для этого мы будем использовать специальную функцию array_walk() .

Эта функция работает следующим образом: она позволяет последовательно применять ко всем элементам массива отдельно созданную функцию. То есть сначала мы создаем самостоятельную функцию, а потом при помощи array_walk() применяем ее к каждому элементу массива. Причем в самостоятельно созданной функции мы можем прописать любое нужное нам действие над элементом массива.

Давайте создадим функцию, которая будет выводить ключ и значение элемента массива на экран, а потом при помощи array_walk() применим ее к каждому элементу нашего массива.

" . $value . "
"; } $Mass["One"] = 5; $Mass["Two"] = 10; $Mass["Three"] = 15; array_walk($Mass, "f_print"); ?>

В итоге на экране мы увидим следующее.

Вот, пожалуй, и все, что я хотела Вам рассказать о переборе элементов массива.

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

В следующей статье мы поговорим о добавлении и удалении элементов массива в разные его места.

Жду Ваших комментариев. Делитесь статьей с друзьями при помощи кнопок социальных сетей и подписывайтесь на обновление блога, чтобы всегда быть в курсе новых публикаций.

С Вами была Анна Котельникова. Успехов и до новых встреч!

(массив в массиве, матрица)
5. Функции для работы с массивами (массив в массиве, матрица)

Что такое массив PHP?

Начать данную тему хотелось бы с отречённых примеров. Допустим, мы рассматриваем какого-либо человека . У него есть имя, фамилия, адрес, телефон, пол, рост, цвет глаз и так далее. Информацию по всем этим пунктам можно отнести к массиву данных о человеке.

Массив может быть другого типа, без какой-либо конкретики по пунктам. Будет только тема. Допустим, это web-прграммирование . А в качестве элементов будут языки - HTML , CSS , JavaScript , PHP , MySQL . Всего 5 элементов.

Исходя из последнего примера предположим массив:

web-программирование
1. HTML
2. CSS
3. JavaScript
4. PHP
5. MySQL

Теперь смотрим на данный пример и анализируем основные понятия.

Массив в PHP - это набор последовательно расположенных однотипных данных, связанных общей тематикой, число элементов которого фиксировано.

Массив в данном примере будет называться web-программирование .

У каждого элемента есть своё порядковое место, идентификатор.
Индекс (ключ массива) - либо порядковый номер, либо текстовое значение, по которому можно идентифицировать элемент.

Индексами в примере выше будут числовые значение от 1 до 5 . При обращении к индексу 2 мы увидим CSS.

Пример массива в PHP

Теперь давайте рассмотрим вышеуказанный пример в синтаксисе PHP, а не русского языка. Допустим массив будет называться короче - web . В квадратных скобках будет вставлять индекс.
Давайте рассмотрим простой пример массива, где в значении индексов будут числовые значения, а создавать массив будем так, словно переменным присваиваем значения.

$web="HTML";
$web="CSS";
$web="JavaScript";
$web="PHP";
$web="MySQL";

$web; // данная переменная содержит массив с 5-ю элементами

// чтобы вывести один из элементов массива достаточно указать индекс в массиве
echo $web; // выведет PHP

Одномерный массив

ИНДЕКСНЫЙ МАССИВ

Выше, с web-программированием, мы рассмотрели как раз пример одномерного массива.
Таким способом он создаётся редко. Он скорее наглядно показывает структуру массива. Чаще прибегают к другому методу.

$web=array("HTML","CSS","JavaScript","PHP","MySQL");
echo $web; // выведет "HTML"
echo $web; // выведет "JavaScript"
echo $web; // выведет "PHP"

Если Вы хотите задать значения индекса, то их надо указать следующим образом. Знак => является указателем для присваивания индекса значению или наоборот значению индекс.

$web=array(1=>"HTML",2=>"CSS",3=>"JavaScript",4=>"PHP",5=>"MySQL");
echo $web; // HTML
echo $web; // CSS
echo $web; // PHP
В примере отсчёт начинается с 1. Переменная с индексом 0 вследствие этого пустая.

В следующем примере мы не будем указывать индекс.

$day="Понедельник"; // индекс 0
$day="Вторник"; // 1
$day="Среда"; // 2
$day="Четверг"; // 3
$day="Пятница"; // 4
Можно проследить, что происходит последовательное заполнение с нуля.

АССОЦИАТИВНЫЙ МАССИВ

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

$user["nick"]="Logic";
$user["name"]="Павел";
$user["age"]="25";
$user["sex"]="Мужской";

$user; // переменная $user содержит массив с 4-мя элементами с буквенными индексами

// выводим элемент массива, указывая его буквенный индекс
echo $web["name"]; // выведет "Павел"
Как видите, всё достаточно просто. Только значение индекса закавычиваем.

Двумерный массив

Если Вы пропустили первую часть с Одномерным массивом , то настоятельно советую прочитать.
Если говорить проще, то это массив в массиве. То есть элементов большого массива является другой. Подобные массивы очень тормозят работу скрипта, загружая оперативную память, поэтому для быстрой обработки подобных групп данных созданы Базы Данных (Что такое База данных?), но о ней позже. Давайте разберём пример двумерного массива.

// массив с названиями Частей Света
$m = array("Европа","Азия","Африка","Америка","Австралия и Океания");

// массив с названиями Стран
$s = array("Россия","Украина","Беларусь","Казахстан");

// массив с названиями Столиц
$с = array("Москва","Киев","Минск","Астана");

// создаём двумерный массив География
$geography = array($m, $s, $с);
?>
Во включенных массивах, как Вы обратили внимание, может быть разное количество элементов. Из части про одномерные массивы следовало, что у каждого элемента массива может быть индекс. Так давайте для каждого включённого массива присвоим своё значение.

Для этого расширим последнюю строчку и напишем её следующим образом.

$geography = array("Части Света"=>$m, "Страны"=>$s, "Столицы"=>$с);

Функции работы с массивами php

Foreach - циклическая функция для работы с массивами, в которой количество циклов равно количеству элементов массива.

Имеет следующий вид. Код PHP

Foreach (массив as $ключ=>$значение)
команды;
Ну и сразу пример работы

// создаём массив со знаменитыми IT
$names["Ритчи"] = "Деннис";
$names["Томпсон"] = "Кен";
$names["Гейтс"] = "Билл";
$names["Джобс"] = "Стив";

Foreach ($names as $key => $value) {
echo "$value $key";
}
?>
На экран скрипт выведет

Деннис Ритчи
Кен Томпсон
Билл Гейтс
Стив Джобс
Count - функция, возвращающая количество элементов в массиве.

Echo count($names); // в нашем примере с IT вернёт значение 4
Sort - функция, сортирующая элементы массива. Удобна в случае числовых значений индекса.
Arsort - функция, сортирующая элементы массива в обратном порядке.

Sort($names); // сортирует по порядку. Удобно если в Индексе числа
arsort($names); // сортировать в обратном порядке. То есть по индексам элементы будут в порядке 3, 2, 1, 0
Unset - функция, удаляющая элемент массива.

Unset($massiv); // удаление элемента массива с индексом 2
unset($massiv); // удаление массива целиком
Array_search - функция поиска в массиве. Имеет два аргумента. Проще говоря, имеет вил array_search("что", где)

$animals="dog";
$animals="cat";
$animals="bird";
echo array_search("cat",$animals); // выведет индекс элемента - цифру 2
Shuffle - функция, которая перемешивает ключи значений массива.

Shuffle($animals); // выстроит элементы в случайном порядке
Спасибо за внимание!

$arr [ 1 ] = "PHP" ;
$arr [ 2 ] = "MySQL" ;
$arr [ 3 ] = "Apache" ;
?>

Элементы массива можно использовать в двойных кавычках как обычные переменные, так код

echo "$arr $arr $arr" ;
?>

$arr [ "first" ] = "PHP" ;
$arr [ "second" ] = "MySQL" ;
$arr [ "third" ] = "Apache" ;
?>

В этом случае массив называется ассоциативным , а его индексы называются ключами . Для вывода элемента массива в строке кавычки (ни двойные, ни одинарные) указывать не следует:

echo "$arr $arr $arr" ;
?>

Так как у ассоциативных массивов нет индексов, для обхода их введён специальный вид цикла - foreach :

foreach($arr as $key => $value )
{
echo "$key = $value
" ;
}
?>

В результате работы цикла будет выведено три строки

first = PHP
second = MySQL
third = Apache

Конструкция "$key =>", позволяющая получить доступ к ключу массива на каждом из циклов является не обязательно и может быть опущена:

foreach($arr as $value )
{
echo "$value
" ;
}
?>

Ряд функций, также позволяют возвращать массивы, например, функция file() , которая читает файл и возвращает его содержимое в виде массива. Каждый элемент массива соответствует одной строке.

$arr = file ("text.txt" );
for($i = 0 ; $i < count ($arr ); $i ++)
{
echo $arr [ $i ]. "
" ;
}
?>

Другой полезной функцией является функция explode() , которая позволяет разбить строку на несколько фрагментов, каждый из которых помещается в отдельный элемент массива:

$str = "345|[email protected]|http://www.softtime.ru|login|password" ;
$arr = explode ("|" , $str );
for($i = 0 ; $i < count ($arr ); $i ++)
{
echo $arr [ $i ]. "
" ;
}
?>

Результат работы скрипта может выглядеть следующим образом:

345
[email protected]
http://www.softtime.ru
login
password

Существует и обратная функция - implode(), которая объединяет, элементы массива в строку, используя для этого заданный разделитель:

$arr = "345" ;
$arr = "[email protected]" ;
$arr = "http://www.softtime.ru" ;
$arr = "login" ;
$arr = "password" ;
$str = implode ("##" , $arr );
echo $str ; //345##[email protected]##http://www.softtime.ru##login##password
?>

Замечание

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

Удалить отдельный элемент массива можно при помощи функции unset() , а проверить существование массива можно при помощи функции isset() . Определим массив из 10 элементов и уничтожим каждый чётный элемент.

unset($arr [ 0 ], $arr [ 2 ], $arr [ 4 ], $arr [ 6 ], $arr [ 8 ]);
// Проверяем существуют ли элементы массива
for($i = 0 ; $i < 10 ; $i ++)
{
if(isset($arr [ $i ])) echo "Элемент $arr[$i] определён
"
;
else echo "Элемент $arr[$i] не определён
"
;
}
?>

Результатом работы скрипта из будут следующие строки

Элемент $arr не определён
Элемент $arr определён
Элемент $arr не определён
Элемент $arr определён
Элемент $arr не определён
Элемент $arr определён
Элемент $arr не определён
Элемент $arr определён
Элемент $arr не определён
Элемент $arr определён

При помощи функции unset() можно уничтожить весть массив сразу.

$arr = array(9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 );
unset($arr );
if(isset($arr )) echo "Массив определён" ;
else echo "Массив не определён" ;
?>

До этого массивы выводились при помощи цикла, однако в PHP предусмотрена специальная функция для вывода дампа массива print_r() . Функция ориентирована на вывод в консольный поток, поэтому при выводе результатов в окно браузера лучше обрамить её тэгами

И 
:

$arr = "345";
$arr = "[email protected]";
$arr = "http://www.softtime.ru";
$arr = "login";
$arr = "password";
echo "

";
print_r($arr);
echo "
";
?>

Результат работы скрипта выглядит следующим образом:

Array
=> 345
=> [email protected]
=> http://www.softtime.ru
=> login
=> password
)

Многомерные массивы

В качестве элементов массива могут выступать не только скалярные величины, но и сами массивы. В этом случае получаются так называемые многомерные массивы.

Пусть необходимо получить такую таблицу:

Для этого создадим двумерный массив:

$arr = array(array(‘Вася’ , ‘слесарь’ , 2500 ),
array(‘Миша’ , ’строитель’ , 3000 ),
array(‘Андрей’ , ‘шофер’ , 2700 ));
?>

Теперь таблицу можно вывести при помощи следующего кода:

for ($i = 0 ; $i < 3 ; $i ++)
{
for ($j = 0 ; $j < 3 ; $j ++)
{
echo " | " . $arr [ $i ][ $j ];
}
echo "
" ;
}
?>

Результат:

| Вася | слесарь | 2500
| Миша | строитель | 3000
| Андрей | шофер | 2700

Также можно использовать трехмерные, четырехмерные и т.п. массивы.

Операции над массивами (сборник рецептов)

1) Определения числа элементов в массиве count() :

Создадим массив $name:

?>

Чтобы определить число элементов в массиве можно поступить следующим образом:

echo ‘Число элементов в массиве - ’ . count ($name );
?>

Результат:

Число элементов в массиве – 8

2) Объединение массивов

a) Создадим два ассоциативных массива $a и $b:

$a = array(“a” => ”aa” , “b” => “bb” );
$b = array(“c” => ”cc” , “d” => “dd” );
?>

Пусть необходимо создать массив $c, которые будет содержать как элементы массива $a так и массива $b:

$a = array("a" => "aa" , "x" => "xx" );
$b = array("c" => "cc" , "d" => "dd" );
$c = $a + $b ;
echo "

"
; 
print_r ($c );
echo "
" ;
?>

Результат:

Array
[a] => aa
[x] => xx
[c] => cc
[d] => dd
)

b) Создадим два числовых массива $a и $b:

$a = array(10 , 20 );
$b = array(100 , 200 , 300 , 400 , 500 );
?>

Их уже не получится объединить при помощи конструкции $c = $a + $b;. Для их объединения потребуется воспользоваться функцией array_merge() :

$c = array_merge ($a , $b );
?>

3) Сортировка массива

Воспользуемся массивом $name:

$name = array("Boss" , "Lentin" , "NAV" , "Endless" , "Dragons" , "SiLeNT" , "Doctor" , "Lynx" );
?>

Пусть требуется отсортировать массив в алфавитном порядке, для этого можно воспользоваться следующим кодом:

sort ($name );
echo "

"
; 
print_r ($name );
echo "
" ;
?>

Результат:

Array
=> Boss
=> Doctor
=> Dragons
=> Endless
=> Lentin
=> Lynx
=> NAV
=> SiLeNT
)

Пусть необходимо из массива $name выбрать самый короткий элемент(у которого наименьшее количество символов), в этом случае можно воспользоваться кодом:

$name = array("Boss" , "Lentin" , "NAV" , "Endless" , "Dragons" , "SiLeNT" , "Doctor" , "Lynx" );
$min = strlen ($name [ 0 ]);
$nam = $name [ 0 ];
for ($i = 1 ; $i < count ($name ); $i ++)
{
$len = strlen ($name [ $i ]);
if ($len < $min )
{
$nam = $name [ $i ];
$min = strlen ($nam );
}
}
echo "Наименьшая длина - " . $nam ;
?>

4) Перемещение внутри массива

Создадим массив $num:

?>

Пусть требуется отобразить элементы массива в обратном порядке, в этом случае можно воспользоваться кодом:

$end = end ($num );
While ($end )
{
echo $end . " - " ;
$end = prev ($num );
}
?>

Результат:

10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 – 1

Приведённый выше код можно модифицировать:

$num = range (1 , 10 );
print_r (array_reverse ($num ));
?>

Функция range(1,10) создает массив (1,2,3,4,5,6,7,8,9,10) со случайным расположением элементов. Функция array_reverse() принимает массив и располагает элементы в обратном порядке (10,9,8,7,6,5,4,3,2,1)

Функции next() , each() перемещают указатель на один элемент вперед. Функция reset() возвращает указатель на 1 элемент в массиве. Воспользуемся массивом $num:

$num = array(1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 );
?>

Пусть необходимо вывести все элементы по порядку, и на последнем элементе массива вернуть указатель на первый элемент массива. Эту операцию можно осуществить при помощи следующего кода.

Доброго времени суток, хабражители!

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

array("key1" => "value1", "key2" => "value2")); ?>

То, конечно, получить, интересующие нас значения, легко:

Echo $array["dimension1"]["key1"]; // value1

Но, а если мы имеем массив n-мерный? Например, пятимерный:

$array = array("dimension1" => array("dimension2" => array("dimension3" => array("dimension4" => array("dimension5" => array("value1" => "Hey! I\"m value1", "value2" => "Hey! I\"m value2"))))));

То, чтобы получить значение по ключу, например, «value1», нам надо прописать такой код:

Echo $array["dimension1"]["dimension2"]["dimension3"]["dimension4"]["dimension5"]["value1"]; // Hey! I"m value1

Я такую запись не назвал бы красивой, хотя она является правильной. Я предлагаю слегка сделать эту запись красивой путем приведения ее к такому виду:

Echo easyA($array)->dimension1->dimension2->dimension3->dimension4->dimension5->value1; // Hey! I"m value1

Согласитесь, ведь смотрится, действительно, куда симпотичней, по сравнению со стандартной записью.

Итак, для начала нам понадобится создать класс, который будет обрабатывать наш массив. Назовем его easyArray и сделаем его одиночкой (Singleton):

Код

class easyArray{ private static $instance; // Состояние класса. private $Array; // Массив, который был передан классу. private function __construct(){ // Запилили конструктор. } private function __clone(){ // Запилили метод клонирования. } public static function getInstance(){ if(null === self::$instance){ self::$instance = new self(); } return self::$instance; }

После того, как наш класс стал одиночкой, добавим ему весьма важный метод, который будет записывать полученный массив в приватную переменную:

Код

public function loadArray($newArray){ if(is_array($newArray)){ $this->Array = $newArray; return $this; }else{ $error = "К сожалению вы передали не массив."; throw new Exception($error); } }
Из кода видно, что мы также осуществляем проверку того, что было передано на вход метода. В случае того, если был передан все-таки не массив, мы просто выбросим исключение с ошибкой "К сожалению вы передали не массив .". Если проверка прошла успешно, то мы записываем в приватную переменную полученный массив и возвращаем текущий объект.

Ну а теперь мы переопределим магический метод "__get()" нашего класса. Это необходимо для того, чтобы получить желаемый нами результат. Итак:

Код

public function __get($index){ if(isset($this->Array[$index])){ if(is_array($this->Array[$index])){ $this->loadArray($this->Array[$index]); return $this; }else{ return $this->Array[$index]; } }else{ $error = "Отсутствует ключ (".$index.") в массиве"; throw new Exception($error); } }

Первым делом, мы проверяем наличие запрошенного ключа в массиве, в случае отсутствия такового, выбрасываем исключение с ошибкой ""Отсутствует ключ (".$index.") в массиве" ". Далее проверяем является ли, запрошенный ключ массивом. Если по такому ключу в массиве находится значение, то просто возвращаем это значение. А если все-таки это массив, то мы отправляем его методу "loadArray($newArray) " и возвращаем текущий объект ($this).

И, как последний штрих нашего класса, добавим метод, который будет возвращать текущий массив, с которым работает наш класс:

Код

public function arrayReturn(){ return $this->Array; }

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

Echo easyArray::getInstance()->loadArray($array)->dimension1->dimension2->dimension3->dimension4->dimension5->value1; // Hey! I"m value1

Стало даже длиннее, чем было. Но эта проблема решаема, и для этого нам понадобится простая функция:

Function easyA($newArray){ return easyArray::getInstance()->loadArray($newArray); }

Ну, а теперь проверим, что мы получили в итоге:

Код

array("dimension2" => array("dimension3" => array("dimension4" => array("dimension5" => array("value1" => "Hey! I\"m value1", "value2" => "Hey! I\"m value2")))))); require_once("easyArray.php"); require_once("easyArrayFunction.php"); echo easyA($array)->dimension1->dimension2->dimension3->dimension4->dimension5->value1; // Hey! I\"m value1 echo easyA($array)->dimension1->dimension2->dimension3->dimension4->dimension5->value2; // Hey! I\"m value2 ?>
Все работает, как и задумывалось.

Помимо этого, данному классу можно передавать конфигурационные файлы типа:

Код

array("dimension2" => array("dimension3" => array("dimension4" => array("dimension5" => array("value1" => "Hey! I\"m value1 from file array.php", "value2" => "Hey! I\"m value2 from file array.php")))))); ?>


Для этого необходимо использовать такую конструкцию:

Код

echo easyA(require_once("array.php"))->dimension1->dimension2->dimension3->dimension4->dimension5->value1; // Hey! I"m value1 from file array.php

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

Спасибо за внимание.