Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: array_valk_recursive и php 5.4.*

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Как же быть-то? Фтопку 5.4.*?
Haron
Отправлено: 20 Октября, 2012 - 22:54:55
Post Id



Частый гость


Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010  
Откуда: Оттуда


Помог: 5 раз(а)




Имеется в php такая замечательная функция:



Все могут ознакомиться с тем, для чего она нужна.

Но вот незадача, в php 5.4.* - вываливается ошибка, что:

Цитата:
Fatal error: Call-time pass-by-reference has been removed...


То бишь мы не сможем изменить ключи и значения в переданном массиве, по ссылке. Хотя в официальной документации - всё пучком и УМВР.

Вопрос, как-же быть в php 5.4.* если надо изменить ключи и значения передаваемого массива?


-----
И чё?
 
 Top
dubasua
Отправлено: 20 Октября, 2012 - 22:59:22
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




А чем так не удобен старый добрый foreach()?
 
 Top
Haron
Отправлено: 20 Октября, 2012 - 23:02:34
Post Id



Частый гость


Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010  
Откуда: Оттуда


Помог: 5 раз(а)




А ты перебери им многомерный массив с неизвестной изначально структурой?

Вообще можно конечно, но это будет "рекурсивный костыль", со всеми вытекающими.

(Отредактировано автором: 20 Октября, 2012 - 23:04:30)



-----
И чё?
 
 Top
dubasua
Отправлено: 20 Октября, 2012 - 23:05:53
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Haron пишет:
А ты перебери им многомерный массив с неизвестной изначально структурой?

Вообще можно конечно, но это будет "рекурсивный костыль", со всеми вытекающими.

Дык напиши рекурсию! Тем более что foreach тоже работает с сылками, массив можно и не копировать
 
 Top
Haron
Отправлено: 20 Октября, 2012 - 23:07:58
Post Id



Частый гость


Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010  
Откуда: Оттуда


Помог: 5 раз(а)




Е**л я рекурсии... Но всё-таки хотелось бы разъяснений по теме, без применения костылей.

(Отредактировано автором: 20 Октября, 2012 - 23:08:52)



-----
И чё?
 
 Top
dubasua
Отправлено: 20 Октября, 2012 - 23:12:34
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Я про то что array_walk_recursive() тоже рекурсия, (можно догадатся даже по названию) только написана она на C++, а ты напиши свою пользовательскую.
 
 Top
Haron
Отправлено: 20 Октября, 2012 - 23:33:37
Post Id



Частый гость


Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010  
Откуда: Оттуда


Помог: 5 раз(а)




Вот собственно, что родил:

PHP:
скопировать код в буфер обмена
  1. function array_walk_recursive_worked($input, $function)
  2.         {
  3.                 foreach ($input as &$v)
  4.                 {
  5.                         if (is_array($v))
  6.                         {
  7.                                 $v = array_walk_recursive_worked($v);
  8.                         }
  9.                         else
  10.                         {
  11.                                 $v = $function($v);
  12.                         }
  13.                         unset($v);
  14.                 }
  15.                 return $input;
  16.         }


Печально, что приходится писать костыли, из-за фимоза php-девелоперов. Функция работает, правда только со значениями (не с ключами!), может кому и пригодится.

Надо бы подумать, как до работы с ключами доработать.

(Отредактировано автором: 20 Октября, 2012 - 23:35:45)



-----
И чё?
 
 Top
dubasua
Отправлено: 20 Октября, 2012 - 23:37:34
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




А что мешает добавить ключ???
PHP:
скопировать код в буфер обмена
  1.  
  2. foreach($array as &$k => &$v){
  3.  
  4. }
  5.  
 
 Top
Haron
Отправлено: 20 Октября, 2012 - 23:38:55
Post Id



Частый гость


Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010  
Откуда: Оттуда


Помог: 5 раз(а)




Цитата:
А что мешает добавить ключ???


Это:

Цитата:
Fatal error: Key element cannot be a reference in ...

(Отредактировано автором: 20 Октября, 2012 - 23:39:49)



-----
И чё?
 
 Top
dubasua
Отправлено: 20 Октября, 2012 - 23:40:59
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Грустно, ну тогда возвращять новый массив, с новыми значениями и ключами
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Если скрипт не работает »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB