Разделы публикаций

 
     
 

Итерация по массиву, значения по ссылке.

samdark
187
    samdark samdark
Александр Макаров
Специализации: 0

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

$arr = array('A''B''C');
foreach ($arr as &$val) {
     $val trim($val);
}


Всё это очень хорошо, но один раз мне пришлось из-за такой возможности очень несладко. Простейший, код, чтобы показать эффект:

$arr = array('A''B''C');
foreach ($arr as &$val) {}
foreach ($arr as $val) {}
var_dump($arr);


array
0 => string 'A' (length=1)
1 => string 'B' (length=1)
2 => &string 'B' (length=1)


Тогда я вместо var_dump использовал print_r и не увидел &… На самом деле объяснение логичное: после первого цикла $val — ссылка на последний элемент массива. При второй итерации по этой ссылке начнут записываться значения, изменяя массив. Решается проблема так:

$arr = array('A''B''C');
foreach ($arr as &$val) {}
unset($val);
foreach ($arr as $val) {}
var_dump($arr);


2
Просмотров: 959
     

Новости inPHP.org Новости inPHP.org
30.12.2011   С наступающим Новым Годом!
Команда inPHP.org поздравляет всех посетителей сайта проекта с наступающим Новым Годом! Вероятно, многие участники проекта заметили некоторое затишье в уходящем году. Поверьте, в следующем всё будет несколько иначе!
31.12.2010   С Новым Годом!
Уважаемые коллеги, коллектив проекта inphp.org искренне поздравляет вас с наступающим Новым Годом!
27.05.2010   Технические работы.
По техническим причинам возможны кратковременные перебои в работе сайта проекта в период с 27.05.2010 по 1.06.2010.
02.03.2010   Доступ участников к разработке тестирований.
В тестовом режиме запущен функционал, позволяющий участникам проекта разрабатывать собственные тестирования. Разработанные сообществом тестирования не имеют ограничений официальной аккредитации и в любое время доступны любому участнику.
 
Содействуют развитию Содействуют развитию
Участники проекта Участники проекта
sergeysa
20
    sergeysa sergeysa

Специализации: 0
mudmen
60
    mudmen mudmen

Специализации: 0
towelie
120
    towelie towelie

Специализации: 0
slavok
100
    slavok slavok

Специализации: 0
kuzya
120
    kuzya kuzya

Специализации: 0
 
Статистика проекта Статистика проекта
Всего пользователей: 3648
Из них аккредитовано: 1468
Были сегодня: 2

УровеньПользователи
7742%
62376,5%
52075,7%
41945,3%
336510%
2401,1%
13509,6%
отсутствует218059,8%