Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
b не равно $b+$a, если $a и $b — массивы. 
Будьте особенно внимательны при слиянии таким образом списков. Рассмотрим сле- 
дующие операторы: 

Часть III. Основы языка PHP 174 
$a=array(10,20,30); 
$b=array(100,200); 
$c=$a+$b; 
Возможно, вы рассчитываете, что в $c будет array(10,20,30,100,200)? Это не- 
верно: там окажется array(10,20,30). Вот почему так происходит. При конкатена- 
ции массивов с некоторыми одинаковыми элементами (то есть, элементами с одина- 
ковыми ключами) в результирующем массиве останется только один элемент с таким 
же ключом — тот, который был в первом массиве, и на том же самом месте. 
Последний факт может слегка озадачить. Казалось бы, элементы массива $b по 
логи- 
ке должны заменить элементы из $a. Однако все происходит наоборот. Окончательно 

выбивает из колеи следующий пример: 
$a=array('a'=>10, 'b'=>20); 
$b=array('c'=>30, 'b'=>'new?'); 
$a+=$b; 
Мы-то ожидали, что оператор += обновит элементы $a при помощи элементов $b. А 
напрасно. В результате этих операций значение $a не изменится! Если вы не 
верите 
своим глазам, можете проверить. 
Так как же нам все-таки обновить элементы в массиве $a? Получается, только пря- 

мым способом — с помощью цикла: 
foreach ($b as $k=>$v) $a[$k]=$v; 
Что поделать, так уж распорядились разработчики PHP. 
Еще несколько слов насчет операции слияния массивов. Цепочка 
$z=$a+$b+$c+...и т. д.; 
эквивалентна 
$z=$a; $z+=$b; $z+=$c; ...и т. д. 
Как нетрудно догадаться, оператор += для массивов делает примерно то же, что и 
оператор += для чисел, а именно — добавляет в свой левый операнд элементы, 
пере- 
численные в правом операнде-массиве, если они еще не содержатся в массиве сле- 
ва. 
Итак, в массиве никогда не может быть двух элементов с одинаковыми ключами, 
потому что все операции, применимые к массивам, всегда контролируют, чтобы 
этого 
не произошло. Впрочем, на мой взгляд, данное свойство вовсе не достоинство, а 
не- 
достаток — вполне можно было бы позволить оператору + оставлять одинаковые 
ключи, а всем остальным — запретить это делать. Что ж, разработчики PHP "пошли 
другим путем"... 

Глава 10. Ассоциативные массивы 175 
Так как списки являются тоже ассоциативными массивами, оператор + будет 
работать с ними неправильно! Например, в результате слияния списков 
array(10,20) и array(100,200,300) получится список array(10,20,300) — 
всего из трех элементов! Согласитесь, ведь это совсем не то, что вы ожидали 
увидеть, не правда ли?.. 
Косвенный перебор элементов массива 
Довольно часто при программировании на PHP нам приходится перебирать все без 
исключения элементы некоторого массива. Если наш массив — список, то эта задача,
 
как мы уже знаем, не будет особенно обременительной: 
// Пусть $Names — список имен. Распечатаем их в столбик 
for($i=0; $i’Вася’, ’age’=>20), 
array(’name’=>’Билл’, ’age’=>40) 
); 
for($i=0; $i
		
 
<<-[Весь Текст]
Страница: из 287
 <<-