ООП   PHP   web   4GL - визуальные среды

Ассоциативные массивы в PHP

Давайте рассмотрим, что такое ассоциативные массивы в PHP? Мы говорили, что у массивов бывают индексы, т.е. то что записывается в квадратных скобках. С одной стороны это удобно с другой нет. Почему это бывает не удобно?

Например, если пользователь прислал нам свои данные (имя, фамилия, email), оформленные в виде массива. Мы хотим обратиться к ячейке массива, где лежит email. Но мы не знаем в какой именно ячейке массива PHP этот email лежит. Хорошо, если данных мало, как здесь, всего 3 ячейки. А если их 133? Что, будем перебирать каждую? Не лучший вариант.

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

<?php
$data['name'] = 'Mike';
$data['login'] = 'root';
$data['password'] = '12345';
$data['age'] = 35;
$data['email'] = 'mike@mike.ru';
$data[] = true; // Здесь мы намеренно ничего не записали
?>

Массив PHP не обязательно должен быть или индексированный, или ассоциативный. Он может быть смешанным, как у нас в примере, т.е пять ячеек именованных, а последняя будет индексная. Так можно.

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

<?php
echo $data[email];
?>

Когда мы создаем массив PHP через функцию array(), то здесь та же самая ситуация:

<?php
$date = array(
	'name'=>'Mike',
	'login'=>'root',
	'password'=>'12345',
	'age'=>35,
	'email'=>'mike@mike.ru',
	true
);
?>

Давайте теперь выполним небольшое упражнение:

  1. Создаем массив bmw с ячейками:
  2. Заполняем ячейки массива значениями: «X6″, 280, 5, «2006″
  3. Создаем массив $toyota и $opel.
  4. Заполняем массив $toyota значениями: «Camry», «250″, 5, «2007″
  5. Заполняем массив $opel значениями: «Astra», 220, 5, «2007″
  6. Выведите значения всех трех массивов в виде: name — model — speed — doors — year, например: bmw — X6 — 280 — 5 — 2006

Теперь давайте разберемся с некоторыми вариантами решения этого задания:

<?php
/*
Создаем массив $bmw
*/
$bmw = array(
	"model"=>'X6',
	"speed"=>280,
	"doors"=>5,
	"year"=>'2006');
/*
Самая сложность заключается в выводе. Первое что приходит на ум, это сделать конкатенацию:
*/
echo 'BMW - '.$bmw["model"]."-".$bmw["speed"].
"-".$bmw["doors"].
"-".$bmw["year"];
?>

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

Тут нам приходит в голову еще одна идея. Мы вспоминает, что переменные, заключенные в двойные кавычки интерполируются, т.е. вместо них подставляются значения, которые находятся в этих переменных. И мы делаем так:

<?php
echo "BMW - $bmw["model"] - $bmw["speed"] - $bmw["doors"] - $bmw["year"]";
?>

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

<?php
echo "BMW - $bmw['model'] - $bmw['speed'] - $bmw['doors'] - $bmw['year']";
?>

Запускаем… И снова получаем ошибку. Что делать?

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

<?php
echo "BMW - {$bmw['model']} - {$bmw['speed']} - {$bmw['doors']} - {$bmw['year']}";
?>

И второе — вообще не использовать кавычки внутри квадратных скобок:

<?php
echo "BMW - $bmw[model] - $bmw[speed] - $bmw[doors] - $bmw[year]";
?>

Чтобы обратиться к символу в строке, мы писали так:

<?php
$str = "Access to the character!";
echo $str{0};
?>

Ровно то же самое можно сделать и вот таким способом:

<?php
$str = "Access to the character!";
echo $str[0];
?>

Однако, такое написание с квадратными скобками может породить у вас ложный вывод о том, что строка наверно это массив PHP. Ничего подобного, просто это такой синтаксис. Поэтому, если где-то вы увидите вот такую запись echo $str[0], то в большинстве случаев это конечно идет обращение к ячейке массива, но может быть и так, что человек обращается к символу в строке. Поэтому всегда помните об этом, это вот такой косячок с синтаксисом в PHP.

ООП   PHP   web   4GL - визуальные среды

Знаете ли Вы, что cогласно релятивистской мифологии "гравитационное линзирование - это физическое явление, связанное с отклонением лучей света в поле тяжести. Гравитационные линзы обясняют образование кратных изображений одного и того же астрономического объекта (квазаров, галактик), когда на луч зрения от источника к наблюдателю попадает другая галактика или скопление галактик (собственно линза). В некоторых изображениях происходит усиление яркости оригинального источника." (Релятивисты приводят примеры искажения изображений галактик в качестве подтверждения ОТО - воздействия гравитации на свет)
При этом они забывают, что поле действия эффекта ОТО - это малые углы вблизи поверхности звезд, где на самом деле этот эффект не наблюдается (затменные двойные). Разница в шкалах явлений реального искажения изображений галактик и мифического отклонения вблизи звезд - 1011 раз. Приведу аналогию. Можно говорить о воздействии поверхностного натяжения на форму капель, но нельзя серьезно говорить о силе поверхностного натяжения, как о причине океанских приливов.
Эфирная физика находит ответ на наблюдаемое явление искажения изображений галактик. Это результат нагрева эфира вблизи галактик, изменения его плотности и, следовательно, изменения скорости света на галактических расстояниях вследствие преломления света в эфире различной плотности. Подтверждением термической природы искажения изображений галактик является прямая связь этого искажения с радиоизлучением пространства, то есть эфира в этом месте, смещение спектра CMB (космическое микроволновое излучение) в данном направлении в высокочастотную область. Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМАФорум Рыцари теории эфира
Рыцари теории эфира
 18.10.2019 - 14:00: ЭКОЛОГИЯ - Ecology -> Биохимия мозга от проф. С.В. Савельева и не только - Карим_Хайдаров.
18.10.2019 - 07:39: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
18.10.2019 - 07:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вячеслава Осиевского - Карим_Хайдаров.
18.10.2019 - 07:26: ЭКОНОМИКА И ФИНАНСЫ - Economy and Finances -> КОЛЛАПС МИРОВОЙ ФИНАНСОВОЙ СИСТЕМЫ - Карим_Хайдаров.
17.10.2019 - 18:29: ЭКСПЕРИМЕНТАЛЬНАЯ ФИЗИКА - Experimental Physics -> Ядерные эксперименты - Карим_Хайдаров.
17.10.2019 - 06:07: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ЗА НАМИ БЛЮДЯТ - Карим_Хайдаров.
17.10.2019 - 06:05: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> КОМПЬЮТЕРНО-СЕТЕВАЯ БЕЗОПАСНОСТЬ ДЛЯ ВСЕХ - Карим_Хайдаров.
17.10.2019 - 06:01: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
16.10.2019 - 19:24: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Ю.Ю. Болдырева - Карим_Хайдаров.
14.10.2019 - 03:09: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Марины Мелиховой - Карим_Хайдаров.
13.10.2019 - 18:09: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Светланы Вислобоковой - Карим_Хайдаров.
13.10.2019 - 08:05: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Декларация Академической Свободы - Карим_Хайдаров.
Bourabai Research Institution home page

Bourabai Research - Технологии XXI века Bourabai Research Institution