Доброго времени суток, хабражители!
В своей статье я хочу поговорить об обработке многомерных ассоциативных массивов в PHP. На мой взгляд, не всегда удобно получать необходимую информацию из многомерного массива. Одно дело если массив двумерный:
$array = array("dimension1" => 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 = array("dimension1" => 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
?>
Все работает, как и задумывалось.
Помимо этого, данному классу можно передавать конфигурационные файлы типа:
Код
return array("dimension1" => 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
Возможно я изобрел велосипед, но я думаю, что данная статья будет интересна, как новичкам, так и остальным программистам.
Спасибо за внимание.
Последнее обновление: 1.11.2015
Массивы предназначены для хранения наборов данных или элементов. Каждый элемент в массиве имеет свой уникальный ключ и значение. Итак, сохраним в массив список моделей телефонов:
"; ?>
Здесь создается массив $phones из четыре элементов. Каждый элемент в массиве представляет собой пару ключ - значение . Так, первый элемент $phones = "Nokia N9" имеет ключ - число 0, а значение - строку "Nokia N9". В таких массивах числовые ключи еще называются индексами.
С помощью функции count() можно узнать количество элементов в массиве. А благодаря тому, что ключи идут по порядку от 0 до 3, и зная размер массива, можно вывести элементы массивы в цикле for .
Чтобы было более понятно отношения ключей и значений элементов, выведем массив с помощью функции print_r :
Print_r($phones);
У нас получится следующий вывод:
Array ( => Nokia N9 => Samsung Galaxy ACE II => Sony Xperia Z3 => Samsung Galaxy III)
Данное создание массива будет также эквивалентно следующему:
"; ?>
Если не указывается ключ элемента, то PHP в качестве ключей использует числа. При этом нумерация ключей начинается с нуля, а каждый новый ключ увеличивается на единицу.
Зная ключ элемента в массиве, мы можем обратиться к этому элементу, получить или изменить его значение:
// получим элемент по ключу 1
$myPhone = $phones;
echo "$myPhone
";
// присвоение нового значения
$phones = "Samsung X650";
echo "$phones
";
Но в качестве ключей могут использоваться не только целые числа, но и строки:
Подобные массивы еще называют ассоциативными.
Оператор array
Выше был рассмотрен один способ создания массива. Но есть и другой, который предусматривает применение оператора array() .
Оператор array() принимает набор элементов. Здесь также явным образом не указаны ключи. Поэтому PHP автоматически нумерует элементы с нуля. Но мы также можем указать для каждого элемента ключ:
"iPhone5", "samsumg"=>"Samsung Galaxy III", "nokia" => "Nokia N9", "sony" => "Sony XPeria Z3"); echo $phones["samsumg"]; ?>
Операция => позволяет сопоставить ключ с определенным значением.
Перебор ассоциативных массивов
Выше мы посмотрели, как с помощью цикла for вывести все элементы массива, где ключи заданы последовательно числами от 0 до 3. Однако с ассоциативными массивами это не работает. И для них в PHP предназначен специальный тип цикла - foreach...as :
"iPhone5",
"samsumg"=>"Samsung Galaxy III",
"nokia" => "Nokia N9",
"sony" => "Sony XPeria Z3");
foreach($phones as $item)
echo "$item
";
?>
В цикле foreach из массива последовательно извлекаются все элементы и их значение помещается в переменную, указанную после ключевого слова as . В данном случае в переменную $item по очереди помещаются все четыре значения из массива $phones. Когда будет извлечен последний элемент из массива, цикл завершается.
Цикл foreach позволяет извлекать не только значения, но и ключи элементов:
"iPhone5",
"samsumg"=>"Samsung Galaxy III",
"nokia" => "Nokia N9",
"sony" => "Sony XPeria Z3");
foreach($phones as $key=>$value)
echo "$key => $value
";
?>
Здесь при переборе элементов цикла в переменную $key будет передаваться ключ элемента, а в переменную $value ее значение.
Альтернативу циклу foreach представляет использование функций list и each :
"iPhone5",
"samsumg"=>"Samsung Galaxy III",
"nokia" => "Nokia N9",
"sony" => "Sony XPeria Z3");
while (list($key, $value) = each($phones))
echo "$key => $value
";
?>
Цикл while будет работать, пока функция each не вернет значение false . Функция each проходит по всем элементам массива $phones и получает его в виде массива, в который входят ключ и значение элемента. Затем этот массив передается функции list и проиcходит присваивает значения массива переменным внутри скобок. Когда функция each закончит перебор элементов массива $phones, она возвратит false , и действие цикла while будет завершено.
Многомерные массивы
В предыдущих примерах рассматривались только одномерные массивы, где значения элементов представляли числа, строки. Но в PHP массивы могут также быть многомерными, то есть такими, где элемент массива сам является массивом. Например, создадим многомерный массив:
array("iPhone5", "iPhone5s", "iPhone6") , "samsumg"=>array("Samsung Galaxy III", "Samsung Galaxy ACE II"), "nokia" => array("Nokia N9", "Nokia Lumia 930"), "sony" => array("Sony XPeria Z3", "Xperia Z3 Dual", "Xperia T2 Ultra")); foreach ($phones as $brand => $items) { echo "
$brand
"; echo "- ";
foreach ($items as $key => $value)
{
echo "
- $value "; } echo "
И при выводе мы получим 4 списка:
Чтобы обратиться к элементу данного, также надо указать ключи в квадратных скобках. Например, обратимся к первому элементу в первом массиве. Так как ключ первого массива - "apple", а ключ первого элемента в первом массиве - число 0 (так как мы явным образом не указали ключи):
Echo $phones["apple"];
Подобным образом можно получить второй элемент третьего массива:
Echo $phones["nokia"];
Допустим, вложенные массивы также представляют ассоциативные массивы:
array("apple" => "iPhone5", "samsumg" => "Samsung Galaxy III", "nokia" => "Nokia N9"), "tablets" => array("lenovo" => "Lenovo IdeaTab A3500", "samsung" => "Samsung Galaxy Tab 4", "apple" => "Apple iPad Air")); foreach ($technics as $tovar => $items) { echo "
$tovar
"; echo "- ";
foreach ($items as $key => $value)
{
echo "
- $key: $value "; } echo "
$arr
[
1
] =
"PHP"
;
$arr
[
2
] =
"MySQL"
;
$arr
[
3
] =
"Apache"
;
?>
Элементы массива можно использовать в двойных кавычках как обычные переменные, так код
echo
"
$arr
[
1
]
$arr
[
2
]
$arr
[
3
]
"
;
?>
$arr
[
"first"
] =
"PHP"
;
$arr
[
"second"
] =
"MySQL"
;
$arr
[
"third"
] =
"Apache"
;
?>
В этом случае массив называется ассоциативным , а его индексы называются ключами . Для вывода элемента массива в строке кавычки (ни двойные, ни одинарные) указывать не следует:
echo
"
$arr
[
first
]
$arr
[
second
]
$arr
[
third
]
"
;
?>
Так как у ассоциативных массивов нет индексов, для обхода их введён специальный вид цикла - 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.сайт|login|password"
;
$arr
=
explode
("|"
,
$str
);
for($i
=
0
;
$i
<
count
($arr
);
$i
++)
{
echo
$arr
[
$i
].
"
"
;
}
?>
Результат работы скрипта может выглядеть следующим образом:
345
[email protected]
http://www.сайт
login
password
Существует и обратная функция - implode(), которая объединяет, элементы массива в строку, используя для этого заданный разделитель:
$arr
=
"345"
;
$arr
=
"[email protected]"
;
$arr
=
"http://www.сайт"
;
$arr
=
"login"
;
$arr
=
"password"
;
$str
=
implode
("##"
,
$arr
);
echo
$str
;
//345##[email protected]##http://www.
?>
Замечание
Вообще функций, которые потрошат строку превеликое множество, рассмотрение всех их выходят за рамки данной статьи.
Удалить отдельный элемент массива можно при помощи функции 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.сайт";
$arr = "login";
$arr = "password";
echo "
print_r($arr);
echo " ";
?>
Результат работы скрипта выглядит следующим образом:
Array
=> 345
=> [email protected]
=> http://www.сайт
=> 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:
$num
= array(1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
);
?>
Пусть требуется отобразить элементы массива в обратном порядке, в этом случае можно воспользоваться кодом:
$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.
$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
Вот как выглядит простой массив:
$my_array = array("Стул", "Облако", 29);?>
Сразу же хочу обратить ваше внимание на данные (да, я специально их так записал 🙂). Данные типа строка, или string
всегда записывайте в кавычках, не важно в каких, пойдут и одинарные и двойные (главное чтобы строка начиналась и закрывалась такой же кавычкой). У числа 29 тип integer
, или число — для таких типов данных кавычки не нужны.
Проверим как выглядит массив $my_array:
echo "
"; print_r($my_array); echo ""; /* получим Array ( => Стул => Облако => 29) */ ?>
так выглядит простой массив.
0,1,2
— индексы нашего массива. С помощью индексов мы можем вывести что-то конкретное из массива.
Также, мы можем создать такой же массив если напишем:
$my_array = "Стул"; $my_array = "Облако"; $my_array = 29; ?>
И, есть еще третий способ:
$my_array = array (0 =>"Стул", 1 => "Облако", 2 => 29);?>
И четвертый 🙂
$my_array = "Стул"; $my_array = "Облако"; $my_array = 29; ?>
индексы будут заполнены от 0.
PHP что такое ассоциативный массив
Что такое простой массив мы уже разобрались. Ассоциативный массив отличается тем, что вместо индексов используют ключи . То есть, для доступа к значениям мы уже не будем использовать 0,1 или 2. Запишем наш простой массив как ассоциативный:
$my_array["item"] = "Стул"; $my_array["sky"] = "Облако"; $my_array["number"] = 29; /* получим если вызовем print_r($my_array); Array ( => Стул => Облако => 29) */ ?>
И для вызова мы будем использовать
Вместо цифры (индекса ) мы задаем осмысленное название (ассоциацию) и наш индекс теперь можно назвать ключем массива (item, sky, number). Наиболее популярная и, пожалуй, самая удобная запись ассоциативного массива:
$my_array = Array("item" => "Стул", "sky" => "Облако", "number" => 29); ?>
Многомерный массив
Буквально пару слов про этого гиганта 🙂
$auto = array ("bmw" => array ("color" => "red", "year" => "2010", "mark" => "M5"), "audi" => array ("color" => "black", "year" => "2011", "mark" => "TT")); print_r ($auto); // вывод массива echo $auto["bmw"]["mark"]; // M5 ?>
Как вы поняли, вместо значения, которым раньше была строка или число, теперь выступает такой тип данных как массив (сделаю тебе массив в массиве, чтобы когда ты вызывал массив там был еще один массив :)).