HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 03.12.2008, 09:54
.:EnoT:.
Постоянный
Регистрация: 29.05.2007
Сообщений: 850
С нами: 9975266

Репутация: 1916


По умолчанию

Цитата:
Сообщение от Twoster  
добрый день, друзья!
Столкнулся с такой странной проблемой:
в общем мне в скрипте нужно полностью весь массив POST нужно обрабатывать, т.е. в цикле изменять каждое значение элемента! Так вот, когда запускаю под линухом, все нормально! А под виндой ни в какую!
вот, собственно в чем может быть проблема?
P.S. Сборки на обеих осях одинаковые!
Apache 2.2.8+PHP 5.2.4
оси:
Linux 2.6.24
Windows XP SP2

Register_globals off
P.P.S. Прошу прощения за столь странный вопрос, просто первый раз столкнулся! заранее спасибо!
Хоть бы кусок кода выложил, т.к. не совсем понятно как тебе нужно обработать массив POST. Юзай цикл...а вот почему на винде у тебя не работает хз...не думаю что это связано именно с ОС
PHP код:
foreach($_POST as $post){
    
// что-то делаем

 
Ответить с цитированием

  #2  
Старый 03.12.2008, 11:07
Twoster
Reservists Of Antichat - Level 6
Регистрация: 20.08.2008
Сообщений: 328
С нами: 9328706

Репутация: 1503
По умолчанию

Цитата:
Сообщение от .:EnoT:.  
Хоть бы кусок кода выложил, т.к. не совсем понятно как тебе нужно обработать массив POST. Юзай цикл...а вот почему на винде у тебя не работает хз...не думаю что это связано именно с ОС
PHP код:
foreach($_POST as $post){
 
// что-то делаем

я в цикле и делаю... Мне нужно для фильтрации и еще некоторых манипуляций!
Я просто с телефона сижу... Сейчас попробую написать! =)
PHP код:
foreach($_POST as $key=>$value)
{
$_POST[$key]=htmlspecialchars($value);
 
// и по аналогии еще одна пользовательская функция

вот примерно такой код, в винде отказывается работать.
 
Ответить с цитированием

  #3  
Старый 03.12.2008, 11:16
[x26]VOLAND
Постоянный
Регистрация: 07.06.2006
Сообщений: 556
С нами: 10487846

Репутация: 2702


По умолчанию

Цитата:
Сообщение от Twoster  
я в цикле и делаю... Мне нужно для фильтрации и еще некоторых манипуляций!
Я просто с телефона сижу... Сейчас попробую написать! =)
PHP код:
foreach($_POST as $key=>$value)
{
$_POST[$key]=htmlspecialchars($value);
 
// и по аналогии еще одна пользовательская функция

вот примерно такой код, в винде отказывается работать.
Боже мой. foreach работает с копией массива. Твой код и не должен работать...
Вот:
PHP код:
$_POST array_map('htmlspecialchars'$_POST); 
array_walk тут юзать нельзя, так как она не может изменять значения.

Последний раз редактировалось [x26]VOLAND; 03.12.2008 в 11:35..
 
Ответить с цитированием

  #4  
Старый 03.12.2008, 16:06
astrologer
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
С нами: 9840758

Репутация: 808


По умолчанию

Цитата:
Сообщение от [x26]VOLAND  
Боже мой. foreach работает с копией массива. Твой код и не должен работать...
Поясни, пожалуйста. В заголовке цикла - понятно, что создается копия массива и левая часть заголовка более не исполняется (правая, кстати, продолжает исполняться). Но разве копирование влияет на то, что происходит в теле цикла?

Разумеется, array_map мне кажется более логичным и понятным решением, но предыдущий пример тоже работает, по крайней мере у меня:
PHP код:
foreach($_POST as $key => $value

  
$_POST[$key] = htmlspecialchars($value);

 
Ответить с цитированием

  #5  
Старый 03.12.2008, 18:57
Helios
Постоянный
Регистрация: 14.01.2007
Сообщений: 459
С нами: 10169427

Репутация: 589
По умолчанию

Цитата:
Сообщение от [x26]VOLAND  
Боже мой. foreach работает с копией массива. Твой код и не должен работать...
Эм.. вы с какого дерева на какой кактус е... упали?
foreach всегда работал и будет работать с оригинальными данными. Жругой вопрос, что в конструкции
PHP код:
foreach($array as $key=>$value
переменная $value передается по значению, а не по ссылке. В результате этого ее изменение на исходные данные в массиве не влияет. При этом
присвоить в первичном массиве значение по ключу никто не мешает. Т.е.
PHP код:
$array 'новое значение'
будет работать всегда.

Также возможно передать значение по ссылке, тогда его можно будет изменять напрямую:
PHP код:
foreach($array as $key => &$value)
{
    
$value 'новое значение';

PS: foreach и array_map никаких родственных связей не имеют.
 
Ответить с цитированием

  #6  
Старый 03.12.2008, 12:31
VDShark
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
С нами: 10143686

Репутация: 526
По умолчанию

foreach($foo as &$bar)
 
Ответить с цитированием

  #7  
Старый 03.12.2008, 12:47
[x26]VOLAND
Постоянный
Регистрация: 07.06.2006
Сообщений: 556
С нами: 10487846

Репутация: 2702


По умолчанию

Цитата:
foreach($foo as &$bar)
А о производительности мы подумали? Мой вариант самый удачный...
 
Ответить с цитированием

  #8  
Старый 03.12.2008, 13:20
VDShark
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
С нами: 10143686

Репутация: 526
По умолчанию

Цитата:
Сообщение от [x26]VOLAND  
А о производительности мы подумали? Мой вариант самый удачный...
Я не читал вопрос - я увидел про копию массива и тп И показал что не обязательно работать с копией.
А про производительность ничего не скажу - надо смотреть как нынче все реализовано. Насколько я понимаю сейчас в пыхе "массивы" - эт списки... хм... и я не особо вижу где здесь будет потеря =) Хотя могу и ошибаться.

upd:

Провел небольшое исследование Использовал array_map и просто обращение по ссылке.
Исследование проводилось на достаточнобольшом объеме данных (500-700к элементов, каждый элемент - строка в сотню-другую символов).
Результаты можно посмотреть ниже (верхний - для array_map):

Код:
6 sec., 0.656254 ms.
5 sec., 0.601045 ms.
6 sec., 0.765628 ms.
6 sec., 0.92188 ms.
6 sec., 0.484379 ms.

---

5 sec., 0.494059 ms.
5 sec., 0.518353 ms.
5 sec., 0.530825 ms.
5 sec., 0.512732 ms.
6 sec., 0.515629 ms.
Как мы видим особой разницы нет, array_map даже показал немногим большее время. Я подозреваю что array_map - эт обертка второго метода, только там что то еще присутствует =)
Конечно все это сделано на коленке и достаточно субъективно - ибо 5 запусков - это маловато. Нужно провести 100, а лучше 1000, и усреднить И можно на разных машинах. Правд на это времени у меня сейчас нету)

Последний раз редактировалось VDShark; 03.12.2008 в 13:55..
 
Ответить с цитированием

  #9  
Старый 03.12.2008, 14:08
[x26]VOLAND
Постоянный
Регистрация: 07.06.2006
Сообщений: 556
С нами: 10487846

Репутация: 2702


По умолчанию

Цитата:
Я подозреваю что array_map - эт обертка
Ммм. Встроенные функции/конструкции реализуются на C. Так что это array_map и foreach - 2 разных алгоритма и не могут быть обёрткой друг друга.

Последний раз редактировалось [x26]VOLAND; 03.12.2008 в 14:12..
 
Ответить с цитированием

  #10  
Старый 03.12.2008, 17:56
VDShark
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
С нами: 10143686

Репутация: 526
По умолчанию

Цитата:
Сообщение от [x26]VOLAND  
Ммм. Встроенные функции/конструкции реализуются на C. Так что это array_map и foreach - 2 разных алгоритма и не могут быть обёрткой друг друга.
Я прекрасно знаю как и на чем написан пых Думаю ты меня понял, я имел ввиду похожую внутреннюю реализацию.

upd:
залез в сорцы пыха - действительно не завязаны друг на друга (хотя впринципе ничео не мешало бы это сделать).
Но факт о скорости работы остается фактом
Так что господа - не стоит говорить того, в чем на 100% не уверен. Если в инете может никтоне обратит внимания, то в реальной жизни это мжет вылится в нехорошие последствия и поставиь вашу репутацию как профессионала (и\или эксперта) под сомнение.

Последний раз редактировалось VDShark; 03.12.2008 в 19:05..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[c/c++] Новичкам: задаем вопросы _Great_ С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 5421 21.04.2026 07:37
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.