Изменение текущего элемента foreach

warobushek

Новичок
Встретил в одном коде что-то подобное

PHP:
foreach ($arr as $k=>$v)  {
  $arr[$k] = do_smth($k, $v);
}
Возникли сомнения, насколько это правильно?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
http://php.net/manual/ru/control-structures.foreach.php

As of PHP 5, you can easily modify array's elements by preceding $value with &. This will assign reference instead of copying the value.

То есть есть смысл писать:

PHP:
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
?>
 

С.

Продвинутый новичок
PHP:
foreach ($arr as $k=>$v)  {
  $arr[$k] = do_smth($k, $v);
}
Возникли сомнения, насколько это правильно?
Что здесь может быть неправильного? А как еще можно пройти по массиву и внести в него изменения (по крайней мере до PHP 5)?
 

Pez!

Я твой сайт похапе писал
может человека смущает, что функция будет вызвана count($arr) раз ?
 

Здыхлик

Kohaner
Команда форума
PHP:
$arr = array_map('do_smth', $arr);
Все то же самое, но выглядит лаконичнее и никаких ссылок :) Правда, надо не забыть подправить do_smth(), чтобы она принимала массив, и его (измененный) отдавала.
 
Сверху