Создать ассоциативный массив php. Виды массивов в PHP
На уроке будут рассмотрены возможности по работе с массивами в php, объявление массива, виды массивов: многомерные и ассоциативные массивы
- Массивы с числовыми индексами
- Ассоциативный массив
$fruits="яблоко"; $fruits="груша"; $fruits="апельсин"; $fruits="абрикос";
Данный вариант инициализации массива сегодня практически не используется. Используется следующий вариант работы с массивами:
Данный вариант создания массива использует объект 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 ...;
В этой небольшой статье мы рассмотрим несколько способов работы с массивами. Стоит отметить, это один из самых важных типов данных и современные языки программирования даже сложно представить без них. Что же такое массив?
Массив представляет собой структурированный набор данных.
По их структуре можно определить это простой массив
или ассоциативный
. Нельзя сказать наверняка какой из них лучше, т.к. применять тот или иной тип нужно по ситуации.
Как создать простой массив в 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 ?>
Как вы поняли, вместо значения, которым раньше была строка или число, теперь выступает такой тип данных как массив (сделаю тебе массив в массиве, чтобы когда ты вызывал массив там был еще один массив :)).
Доброго времени суток, хабражители!
В своей статье я хочу поговорить об обработке многомерных ассоциативных массивов в 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
Возможно я изобрел велосипед, но я думаю, что данная статья будет интересна, как новичкам, так и остальным программистам.
Спасибо за внимание.
Ассоциативный массив – незаменимый тип данных, используемый для описания совокупности уникальных ключей и ассоциативных значений, – является базовым элементом всех языков программирования, включая PHP. По существу, ассоциативные массивы играют такую важную роль в веб-программировании, что в PHP включена поддержка множества функций и свойств, способных управлять массивами данных всеми мыслимыми способами. Такая обширная поддержка может оказаться чересчур громоздкой для разработчиков, ищущих наиболее эффективные способы управления массивами в своих приложениях. В этой статье я приведу 10 подсказок, которые помогут вам резать, кромсать и шинковать ваши данные бесконечным числом способов.
1. Добавление элементов массива.
PHP – слабо типизированный язык, т. е. в нем не надо детально описывать ни массив, ни его размер. Вместо этого массив можно одновременно объявить и наполнить:
$capitals = array("Alabama" => "Montgomery", "Alaska" => "Juneau", "Arizona" => "Phoenix");
Дополнительные элементы массива могут присоединяться следующим способом:
$capitals["Arkansas"] = "Little Rock";
Если вы работаете с массивами, пронумерованными числами, и предпочли бы присоединять элементы (в начало массива) и прикреплять элементы, используя детально-названную функцию, рассмотрите array_push() и array_unshift() функции (эти функции не работают с ассоциативными массивами).
2. Удаление элементов массива
Чтобы удалить элемент из массива, воспользуйтесь unset() функцией:
Unset($capitals["California"]);
Работая с массивами, пронумерованными числами, вы получаете больше свободы в том, что касается удаления элементов массива. Т. е. вы можете воспользоваться функциями array_shitt() и array_pop() , чтобы удалить элемент с начала и с конца массива соответственно.
3. Меняем местами ключи и значения
Предположим, что вы захотели создать новый массив с именем $states , столицы штатов в котором будут индексами, а сами штаты – ассоциативными значениями. Данная задача (меняем местами ключи и значения) легко решается с помощью array_flip() функции:
$capitals = array("Alabama" => "Montgomery", "Alaska" => "Juneau", "Arizona" => "Phoenix"); $states = array_flip($capitals); // $states = array(// "Montgomery" => string "Alabama", // "Juneau" => string "Alaska", // "Phoenix" => string "Arizona" //);
4. Слияние массивов
Предположим, что предыдущий массив использовался в сочетании с основанным на web-технологиях "flash card" (flashcard - карточка с текстом и картинкой (используется при обучении иностранному языку)) сервисом и вы захотели дать возможность студентам проверить их знания не только о мировых столицах, но и столицах соединенных штатов. Можно соединить массив (со столицами штатов) с массивом (с мировыми столицами) использую array_merge() функцию:
$stateCapitals = array("Alabama" => "Montgomery", "Alaska" => "Juneau", "Arizona" => "Phoenix"); $countryCapitals = array ("Australia" => "Canberra", "Austria" => "Vienna", "Algeria" => "Algiers"); $capitals = array_merge($stateCapitals, $countryCapitals);
5. Редактирование значений массивов
Предположим, что найденные в массиве данные могут содержать ошибки связанные с употреблением заглавных букв, а вы хотите исправить эти ошибки, прежде чем вносить данные в базу данных. В этом случае можно воспользоваться array_map() функцией, чтобы применить callback-функцию к каждому элементу массива:
Function capitalize($element) { $element = strtolower($element); // Переводим все буквы в нижний регистр return ucwords($element); // Преобразуем в верхний регистр первый символ каждого слова в строке } $capitals = array("Alabama" => "montGoMEry", "Alaska" => "Juneau", "Arizona" => "phoeniX"); $capitals = array_map("capitalize", $capitals);
6. Сортируем массивы по ключам
Флэшкард приложения (flashcard - карточка с текстом и картинкой (используется при обучении иностранному языку)) прибегают к различным техникам обучения, включая сортировку карточек определенными способами, к примеру, по алфавиту. Можно сортировать ассоциативные массивы по ключам, используя ksort() функцию:
$capitals = array("Arizona" => "Phoenix", "Alaska" => "Juneau", "Alabama" => "Montgomery"); ksort($capitals);
7. Рандомизация порядка массива
Перемешать элементы в случайном порядке можно при помощи функции shuffle() :
$capitals = array("Arizona" => "Phoenix",
"Alaska" => "Juneau",
"Alabama" => "Montgomery");
shuffle($capitals);
foreach ($capitals as $k=>$v)
echo "$k: $v
";
Результат:
Обратите внимание, на выходе мы получаем не ассоциативный массив, а числовой массив .
Если вместо рандомизации массива вы хотите наугад выбрать значение, воспользуйтесь array_rand() функцией.
8. Определяем, существуют ли ключи и значения
Можно воспользоваться in_array() функцией, чтобы определить, существуют ли элементы массива:
$capitals = array("Arizona" => "Phoenix", "Alaska" => "Juneau", "Alabama" => "Montgomery"); if (in_array("Juneau", $capitals)) { echo "Exists!"; } else { echo "Does not exist!"; }
Возможность определить: существуют ли ключи массива, менее известна. Реализуется же она с помощью array_key_exists() функции:
$capitals = array("Arizona" => "Phoenix", "Alaska" => "Juneau", "Alabama" => "Montgomery"); if (array_key_exists("Alaska", $capitals)) { echo "Key exists!"; } else { echo "Key does not exist!"; }
9. Ищем массив
Возможно, вы захотите снабдить флэшкард ресурс поиском, чтобы пользователи легко могли найти штат, которой связан с определенной столицей. Это можно осуществить с помощью функции array_search() (эта функция ищет в массиве заданное значение и возвращает соответствующий ключ):
$capitals = array("Arizona" => "Phoenix", "Alaska" => "Juneau", "Alabama" => "Montgomery"); $state = array_search("Juneau", $capitals); // $state = "Alaska"
10. Стандартная PHP библиотека
Стандартная PHP библиотека (SPL) снабжает разработчиков порядочным числом структур данных, интерфейсов, исключений и других свойств, которыми раньше язык PHP похвастаться не мог. Среди этих свойств есть возможность итерации (повторения) массива с помощью объекто-оринетированного синтаксиса.
$capitals = array("Arizona" => "Phoenix",
"Alaska" => "Juneau",
"Alabama" => "Montgomery");
$arrayObject = new ArrayObject($capitals);
foreach ($arrayObject as $state => $capital)
{
printf("The capital of %s is %s
", $state, $capital);
}
// The capital of Arizona is Phoenix
// The capital of Alaska is Juneau
// The capital of Alabama is Montgomery
Это только одно из классных свойств, включенных в SPL. Для получения большей информации ознакомьтесь с PHP документацией.
Ассоциативные массивы
Простые массивы используют ключи только для разделения элементов и не имеют практической ценности:
В ассоциативных массивах ключи описывают, что именно за значение в них содержится - возраст, имя и т.д.:
"Владимир", "age" => 20]; ?>
Двумерные и многомерные массивы
До сих пор мы имели дело только с одномерными массивами, но мы также можем создать двумерный или любой многомерный массив:
"Вася"]; $human["hands"] = ["left", "right"]; print_r($human); ?>
Как видите, мы создали массив $human , а затем внутри него создали ещё один массив $human["hands"] . Результат в браузере:
Array ( => Вася => Array ( => left => right))
Мы можем создавать многомерные массивы любой вложенности. Вывод значений такого массива выглядит следующим образом:
Практическое применение многомерных массивов
Помните, на предыдущем уроке мы хотели сгруппировать товары и их характеристики? Напомню код, который у нас получился:
Samsung Galaxy"; $product2_price = 5000; $product2_quantity = true; $product3_name = "Nokia Lumia"; $product3_price = 4000; $product3_quantity = true; ?>
Теперь мы можем поместить всю эту информацию в одну переменную. При этом каждый товар будет представлять собой ассоциативный массив, а все товары будут находиться внутри простого массива:
"iPhone", "price" => 5000, "quantity" => true ], [ "name" => "Samsung Galaxy", "price" => 5000, "quantity" => true ], [ "name" => "Nokia Lumia", "price" => 4000, "quantity" => true ] ]; ?>
Или альтернативный вариант:
"iPhone", "price" => 5000, "quantity" => true ]; $products = [ "name" => "Samsung Galaxy", "price" => 5000, "quantity" => true ]; $products = [ "name" => "Nokia Lumia", "price" => 4000, "quantity" => true ]; ?>
Результатом обоих вариантов будет:
Array ( => Array ( => iPhone => 5000 => 1) => Array ( => Samsung Galaxy => 5000 => 1) => Array ( => Nokia Lumia => 4000 => 1))
1. Создайте массив $city , добавьте в него ключ name с любым значением. 2. Создайте подмассив streets с любыми случайными улицами. Каждая улица должна иметь имя (name) и количество домов (buildings_count), а также подмассив из номеров домов (old_buildings), подлежащих сносу.