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

187
|
|
samdark
Александр Макаров
Специализации: 0
|
|
|
Иногда удобно воспользоваться возможностью PHP5 и использовать передачу по ссылке при переборе элементов массива. Например, для обрезания лишних пробелов у всех элементов:
| 1 | $arr = array('A', 'B', 'C');
| | 2 | foreach ($arr as &$val) {
| | 3 | $val = trim($val);
| | 4 | } |
$arr = array('A', 'B', 'C');
foreach ($arr as &$val) {
$val = trim($val);
}
Всё это очень хорошо, но один раз мне пришлось из-за такой возможности очень несладко. Простейший, код, чтобы показать эффект:
| 1 | $arr = array('A', 'B', 'C');
| | 2 | foreach ($arr as &$val) {}
| | 3 | foreach ($arr as $val) {}
| | 4 | var_dump($arr); |
$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 — ссылка на последний элемент массива. При второй итерации по этой ссылке начнут записываться значения, изменяя массив. Решается проблема так:
| 1 | $arr = array('A', 'B', 'C');
| | 2 | foreach ($arr as &$val) {}
| | 3 | unset($val);
| | 4 | foreach ($arr as $val) {}
| | 5 | var_dump($arr); |
$arr = array('A', 'B', 'C');
foreach ($arr as &$val) {}
unset($val);
foreach ($arr as $val) {}
var_dump($arr);
|
|
|
|
|
|
 Новости inPHP.org
30.12.2011 С наступающим Новым Годом!
Команда inPHP.org поздравляет всех посетителей сайта проекта с наступающим Новым Годом! Вероятно, многие участники проекта заметили некоторое затишье в уходящем году. Поверьте, в следующем всё будет несколько иначе!
31.12.2010 С Новым Годом!
Уважаемые коллеги, коллектив проекта inphp.org искренне поздравляет вас с наступающим Новым Годом!
27.05.2010 Технические работы.
По техническим причинам возможны кратковременные перебои в работе сайта проекта в период с 27.05.2010 по 1.06.2010.
02.03.2010 Доступ участников к разработке тестирований.
В тестовом режиме запущен функционал, позволяющий участникам проекта разрабатывать
собственные тестирования. Разработанные сообществом тестирования не имеют ограничений официальной
аккредитации и в любое время доступны любому участнику.
|
 |
|
|
|
|
|
 Содействуют развитию
 Участники проекта

120
|
|
kuzya
Специализации: 0
|
|
|
 |
|
|
|
|
|
 Статистика проекта
| Всего пользователей: | 3648 |
| Из них аккредитовано: | 1468 |
| Были сегодня: | 2 |
| Уровень | Пользователи | |
| 7 | 74 | 2% |
| 6 | 237 | 6,5% |
| 5 | 207 | 5,7% |
| 4 | 194 | 5,3% |
| 3 | 365 | 10% |
| 2 | 40 | 1,1% |
| 1 | 350 | 9,6% |
| отсутствует | 2180 | 59,8% |
|
 |
|
|
|
|
|
|
|
|
|