| imho.ws |
![]() |
|
|
|
# 1 |
|
Full Member
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Помогите с алгоритмом...
Задача:
Человек может выбрать год - от 2003 до 2005 (в дальнейшем кол-во лет будет увеличено). При выборе 2005 нужно сложить переменные 1 + $yr2004 + $yr2003 При выборе 2004 нужно сложить переменные 1 + $yr2003 При выборе 2003 нужно сложить переменные 1 Смысл понятен? Нужно чтобы выбранный год складывался со всеми предыдущими (начиная с 2003). И чтобы это было полностью автоматически... как это сделать? Последний раз редактировалось Neo; 05.04.2004 в 22:13. |
|
|
|
|
# 2 |
|
Full Member
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
У меня пока на уме что-то такое, но это сложно:
вводим test.php?yr=2005 PHP код:
Последний раз редактировалось Neo; 04.04.2004 в 01:52. |
|
|
|
|
# 7 |
|
Guest
Сообщения: n/a
|
Variable variables
Sometimes it is convenient to be able to have variable variable names. That is, a variable name which can be set and used dynamically. A normal variable is set with a statement such as: PHP код:
PHP код:
At this point two variables have been defined and stored in the PHP symbol tree: $a with contents "hello" and $hello with contents "world". Therefore, this statement: PHP код:
produces the exact same output as: PHP код:
i.e. they both produce: hello world. In order to use variable variables with arrays, you have to resolve an ambiguity problem. That is, if you write $$a[1] then the parser needs to know if you meant to use $a[1] as a variable, or if you wanted $$a as the variable and then the [1] index from that variable. The syntax for resolving this ambiguity is: ${$a[1]} for the first case and ${$a}[1] for the second. Please note that variable variables cannot be used with PHP's Superglobal arrays. This means you cannot do things like ${$_GET}. If you are looking for a way to handle availability of superglobals and the old HTTP_*_VARS, you might want to try referencing them. |
|
|
# 8 |
|
Member
Регистрация: 02.05.2003
Адрес: Бельгия
Сообщения: 201
![]() |
mmaaxx
Классно. Я тоже об этом не знал. Вот уж век живи - век учись. С меня 5 (; Добавлено через 9 минут: Кстати можно было бы и массивом сделать. Благо массивы динамические. $yr_array = array ( 4 , 10, 10); $total = 0; // $yr_array[3] = 10; // for year 2006 for ($i = $yr - 2003 ; $i >= 0; $i-- ) $total += $yr_array[$i]; Конечно малёк сложнее, но проще ( моно вообще динамически ) будет добавлять года. Последний раз редактировалось sky7; 04.04.2004 в 02:43. |
|
|
|
|
# 10 |
|
Member
Регистрация: 02.05.2003
Адрес: Бельгия
Сообщения: 201
![]() |
А, ну тут конечно не пойдёт. Переменной "sel[01]" то нет! есть переменная "sel" типа array и "01" элемент оной является строкой "selected".
Если //$selected=1234; $sel[01]="selected"; $numstr = ${$sel[01]}; // или = ${${"sel"}[01]}; По-идее будет работать, если я правильно понял намеренья. ( я не проверял ) (; Добавлено через 4 минуты: Тут имхо на эвалюацию строк в ЛИСПе логика похожа. Плохой стиль, но бывает полезно... |
|
|
|
|
# 11 |
|
Full Member
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
не, не правильно. еще раз:
есть PHP код:
зы. что такое ЛИСП? Последний раз редактировалось Neo; 04.04.2004 в 03:44. |
|
|
|
|
# 12 | |
|
Member
Регистрация: 02.05.2003
Адрес: Бельгия
Сообщения: 201
![]() |
В предыдущем случае, прежде чем вызывать переменную её надо эвалюировать ( термином LISPа - это язык такой ... с круглыми скобками (; )
Для эвалюации и используется ${имя_переменной_как_строка} ( И почему нет? Я даже спецом проверил ... оба варианта работают ) Мало того Цитата:
PHP код:
Отсюда ошибка: Parse error: parse error, unexpected '\"', expecting T_STRING or T_VARIABLE or T_NUM_STRING , что по-русски - он ждал индексации массива, так как нашел "[", а индексации не произошло. Объясни на словах, что ты хочешь добиться? PS Да, и старайся таки следовать принципу KISS.. Это и так плохой стиль, а ещё усложнять.... хотя смотри сам. Добавлено через 14 минут: Или, уж если очень хочется с 01 -09 то PHP код:
Последний раз редактировалось sky7; 04.04.2004 в 04:08. |
|
|
|
|
|
# 13 |
|
Full Member
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Нет. не работает. выходит <option ><option ><option ><option >....
Добавлено через 6 минут: Сложновато объяснить чего я хочу.. но - попробую. Короче, есть выпадающее меню навигации (см. здесь: http://shabash.dreamsee.ru/xron.html) Допустим, начало: PHP код:
<option <?php echo "$sel[01]"; ?> value=1>01 [005]</option> <option <?php echo "$sel[02]"; ?> value=2>02 [006]</option> <option <?php echo "$sel[03]"; ?> value=3>03 [007]</option> <option <?php echo "$sel[04]"; ?> value=4>04 [008]</option> ... и так далее, строк столько, сколько выпусков в году. далее, человек выбирает выпуск 1, год 2004. значит, PHP код:
<option <?php echo "$sel[01]"; ?> value=1>01 [005]</option> причем этих строк столько, сколько выпусков в текущем году. достаточно понятно? |
|
|
|
|
# 14 |
|
Member
Регистрация: 02.05.2003
Адрес: Бельгия
Сообщения: 201
![]() |
Фи! Так то и есть последствия плохого стиля (; ( не в обиду сказано... сам страдаю периодически )
Смотри - ты индексируешь массив челыми числами, а обратиться хочешь, индексируя строками. Тут надо определиться. Или так: PHP код:
PHP код:
|
|
|
|
|
# 15 |
|
Full Member
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
sky7
Спасибо. Еще одна вещь, которой я не знал - что массив можно индексировать числами или строками. думал - числа всегда есть числа ![]() кроме того, чего вдруг sprintf возвращает строку? ведь то что он возвращает есть число. ![]() а что ты называешь плохим стилем? |
|
|
|
|
# 16 | |||
|
Member
Регистрация: 02.05.2003
Адрес: Бельгия
Сообщения: 201
![]() |
Цитата:
Цитата:
Цитата:
Всегда пожайлуста |
|||
|
|
|
|
# 17 |
|
Full Member
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Всем спасибо. Вот что у меня получилось: (конечно сложно читать но что ж поделаешь я не мастер языка пхп - пока что
)PHP код:
|
|
|
|
|
# 20 |
|
Full Member
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
mmaaxx
Ошибаисси. Не работает или ты не понял чего я хочу. работает так: <?php $year[2003]="selected"; $year[2004]="selected"; for ($i = 2003; $i <= 2005; $i++) { var_dump ($year[$i]); // selected, selected, NULL } ?> |
|
|