
03.12.2008, 09:54
|
|
Постоянный
Регистрация: 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){
// что-то делаем
}
|
|
|

03.12.2008, 11:07
|
|
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);
// и по аналогии еще одна пользовательская функция
}
вот примерно такой код, в винде отказывается работать.
|
|
|

03.12.2008, 11:16
|
|
Постоянный
Регистрация: 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..
|
|
|

03.12.2008, 16:06
|
|
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
С нами:
9840758
Репутация:
808
|
|
Сообщение от [x26]VOLAND
Боже мой. foreach работает с копией массива. Твой код и не должен работать...
Поясни, пожалуйста. В заголовке цикла - понятно, что создается копия массива и левая часть заголовка более не исполняется (правая, кстати, продолжает исполняться). Но разве копирование влияет на то, что происходит в теле цикла?
Разумеется, array_map мне кажется более логичным и понятным решением, но предыдущий пример тоже работает, по крайней мере у меня:
PHP код:
foreach($_POST as $key => $value)
{
$_POST[$key] = htmlspecialchars($value);
}
|
|
|

03.12.2008, 18:57
|
|
Постоянный
Регистрация: 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 никаких родственных связей не имеют.
|
|
|

03.12.2008, 12:31
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
С нами:
10143686
Репутация:
526
|
|
foreach($foo as &$bar)
|
|
|

03.12.2008, 12:47
|
|
Постоянный
Регистрация: 07.06.2006
Сообщений: 556
С нами:
10487846
Репутация:
2702
|
|
А о производительности мы подумали? Мой вариант самый удачный...
|
|
|

03.12.2008, 13:20
|
|
Участник форума
Регистрация: 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..
|
|
|

03.12.2008, 14:08
|
|
Постоянный
Регистрация: 07.06.2006
Сообщений: 556
С нами:
10487846
Репутация:
2702
|
|
Я подозреваю что array_map - эт обертка
Ммм. Встроенные функции/конструкции реализуются на C. Так что это array_map и foreach - 2 разных алгоритма и не могут быть обёрткой друг друга.
Последний раз редактировалось [x26]VOLAND; 03.12.2008 в 14:12..
|
|
|

03.12.2008, 17:56
|
|
Участник форума
Регистрация: 01.02.2007
Сообщений: 286
С нами:
10143686
Репутация:
526
|
|
Сообщение от [x26]VOLAND
Ммм. Встроенные функции/конструкции реализуются на C. Так что это array_map и foreach - 2 разных алгоритма и не могут быть обёрткой друг друга.
Я прекрасно знаю как и на чем написан пых  Думаю ты меня понял, я имел ввиду похожую внутреннюю реализацию.
upd:
залез в сорцы пыха - действительно не завязаны друг на друга (хотя впринципе ничео не мешало бы это сделать).
Но факт о скорости работы остается фактом 
Так что господа - не стоит говорить того, в чем на 100% не уверен. Если в инете может никтоне обратит внимания, то в реальной жизни это мжет вылится в нехорошие последствия и поставиь вашу репутацию как профессионала (и\или эксперта) под сомнение.
Последний раз редактировалось VDShark; 03.12.2008 в 19:05..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|