imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 04.04.2004, 01:24     # 1
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
Помогите с алгоритмом...

Задача:

Человек может выбрать год - от 2003 до 2005 (в дальнейшем кол-во лет будет увеличено).
При выборе 2005 нужно сложить переменные 1 + $yr2004 + $yr2003
При выборе 2004 нужно сложить переменные 1 + $yr2003
При выборе 2003 нужно сложить переменные 1

Смысл понятен?
Нужно чтобы выбранный год складывался со всеми предыдущими (начиная с 2003). И чтобы это было полностью автоматически... как это сделать?

Последний раз редактировалось Neo; 05.04.2004 в 22:13.
Psionic Vision вне форума  
Старый 04.04.2004, 01:38     # 2
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
У меня пока на уме что-то такое, но это сложно:

вводим test.php?yr=2005

PHP код:
$yr2003 4;
$yr2004 10;
$yr2005 10;
$yr2006 10;
$yr2007 10;
$yr2008 10;

$dif $yr-2003;

if (
$yr==2003) {
    
$total=$yr2003;
} else {
    for (
$i=0$i<=$dif$i++) {
    
$par "yr$yr";
    
$total $total+$$par;
    
$yr=$yr-1;
    }
}

echo 
$total
нельзя ли это как-то упростить?

Последний раз редактировалось Neo; 04.04.2004 в 01:52.
Psionic Vision вне форума  
Старый 04.04.2004, 01:43     # 3
joker99
Full Member
 
Аватар для joker99
 
Регистрация: 19.07.2003
Адрес: Israel
Сообщения: 924

joker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форуме
А на каком языке?
__________________
Столько дел, что и работой занятся некогда...
joker99 вне форума  
Старый 04.04.2004, 01:46     # 4
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
joker99
PHP
Psionic Vision вне форума  
Старый 04.04.2004, 01:52     # 5
mmaaxx
Junior Member
 
Регистрация: 08.10.2003
Сообщения: 98

mmaaxx Известность не заставит себя ждать
Neo
PHP код:
$yr2003 4
$yr2004 10
$yr2005 10

//$yr=2005;

for($i=2003$i<=$yr$i++) $total+=${"yr$i"};

echo 
$total
mmaaxx вне форума  
Старый 04.04.2004, 01:54     # 6
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
mmaaxx
Привет!
Спасибо . А я и не знал, что можно так вкладывать переменные:

Цитата:
mmaaxx:
${"yr$i"};
в документации об этом не написано
Psionic Vision вне форума  
Старый 04.04.2004, 02:22     # 7
Vaulter
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
$a 
"hello";
?>
A variable variable takes the value of a variable and treats that as the name of a variable. In the above example, hello, can be used as the name of a variable by using two dollar signs. i.e.

PHP код:
<?php
$$a "world";
?>

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 код:
<?php
echo "$a ${$a}";
?>

produces the exact same output as:

PHP код:
<?php
echo "$a $hello";
?>

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.
 
Старый 04.04.2004, 02:41     # 8
sky7
Member
 
Аватар для sky7
 
Регистрация: 02.05.2003
Адрес: Бельгия
Сообщения: 201

sky7 Путь к славе только начался
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.
sky7 вне форума  
Старый 04.04.2004, 03:10     # 9
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
С меня тоже
А почему вот это не работает:

$sel[01]="selected";
$numstr = ${"sel[01]"};
var_dump ($numstr); // выдает NULL
Psionic Vision вне форума  
Старый 04.04.2004, 03:27     # 10
sky7
Member
 
Аватар для sky7
 
Регистрация: 02.05.2003
Адрес: Бельгия
Сообщения: 201

sky7 Путь к славе только начался
А, ну тут конечно не пойдёт. Переменной "sel[01]" то нет! есть переменная "sel" типа array и "01" элемент оной является строкой "selected".

Если
//$selected=1234;
$sel[01]="selected";
$numstr = ${$sel[01]}; // или = ${${"sel"}[01]};

По-идее будет работать, если я правильно понял намеренья. ( я не проверял ) (;

Добавлено через 4 минуты:
Тут имхо на эвалюацию строк в ЛИСПе логика похожа. Плохой стиль, но бывает полезно...
sky7 вне форума  
Старый 04.04.2004, 03:42     # 11
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
не, не правильно. еще раз:

есть

PHP код:
будет считать что $sel[01до $sel[10] = "selected";

for (
$i=1$i<10$i++) {
print 
"<option $sel[".sprintf("%02d", $i)."]>";

это не работает.
зы. что такое ЛИСП?

Последний раз редактировалось Neo; 04.04.2004 в 03:44.
Psionic Vision вне форума  
Старый 04.04.2004, 04:20     # 12
sky7
Member
 
Аватар для sky7
 
Регистрация: 02.05.2003
Адрес: Бельгия
Сообщения: 201

sky7 Путь к славе только начался
В предыдущем случае, прежде чем вызывать переменную её надо эвалюировать ( термином LISPа - это язык такой ... с круглыми скобками (; )

Для эвалюации и используется ${имя_переменной_как_строка}

( И почему нет? Я даже спецом проверил ... оба варианта работают )

Мало того

Цитата:
будет считать что $sel[01] до $sel[10] = "selected";

for ($i=1; $i<10; $i++) {
print "<option $sel[".sprintf("%02d", $i)."]>";
}
В этом случае
PHP код:
//for ($i=1; $i<10; $i++) $sel[$i] = "selected";

for ($i=1$i<10$i++) {echo "<option  ".$sel[$i]." >";} 
твой sprintf будет возвращать строчку для print'а а не для индексации массива ( видимо, да и по-логике, сначала в строках ищутся переменные, а только потом строки складываются для передачи в print () ).

Отсюда ошибка: Parse error: parse error, unexpected '\"', expecting T_STRING or T_VARIABLE or T_NUM_STRING , что по-русски - он ждал индексации массива, так как нашел "[", а индексации не произошло.

Объясни на словах, что ты хочешь добиться?

PS Да, и старайся таки следовать принципу KISS.. Это и так плохой стиль, а ещё усложнять.... хотя смотри сам.



Добавлено через 14 минут:
Или, уж если очень хочется с 01 -09 то
PHP код:
//for ($i=1; $i<10; $i++) $sel[sprintf("%02d", $i)] = "selected";
   
for ($i=1$i<10$i++) print "<option ".$sel[sprintf("%02d"$i)].">"
Проверил. Работает.

Последний раз редактировалось sky7; 04.04.2004 в 04:08.
sky7 вне форума  
Старый 04.04.2004, 04:32     # 13
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
Нет. не работает. выходит <option ><option ><option ><option >....

Добавлено через 6 минут:
Сложновато объяснить чего я хочу.. но - попробую.
Короче, есть выпадающее меню навигации (см. здесь: http://shabash.dreamsee.ru/xron.html)

Допустим, начало:

PHP код:
$yr2003 4
$yr2004 14
if (!
$yr$yr=2004;

// for($i=2003; $i<=$yr; $i++) $total+=${"yr$i"}; - пока не надо, чуть позже понадобится 
Сейчас у меня есть файл, допустим nav2004, содержащий вот это:

<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 код:
$sel[01]="selected";

for (
$i=1$i<10$i++) print "<option ".$sel[sprintf("%02d"$i)].">"
вот этой строкой мне надо сгенерировать строки типа
<option <?php echo "$sel[01]"; ?> value=1>01 [005]</option>
причем этих строк столько, сколько выпусков в текущем году.
достаточно понятно?
Psionic Vision вне форума  
Старый 04.04.2004, 04:48     # 14
sky7
Member
 
Аватар для sky7
 
Регистрация: 02.05.2003
Адрес: Бельгия
Сообщения: 201

sky7 Путь к славе только начался
Фи! Так то и есть последствия плохого стиля (; ( не в обиду сказано... сам страдаю периодически )

Смотри - ты индексируешь массив челыми числами, а обратиться хочешь, индексируя строками. Тут надо определиться. Или так:
PHP код:
/*
   $sel[01] = "selected";
   $sel[02] = "selected";
   $sel[03] = "selected";
   $sel[04] = "selected";
   $sel[05] = "selected";
*/
   
for ($i=1$i<=5$i++) print "<option ".$sel[$i].">"
Или так:
PHP код:
/*
   $sel["01"] = "selected";
   $sel["02"] = "selected";
   $sel["03"] = "selected";
   $sel["04"] = "selected";
   $sel["05"] = "selected";
*/
  
for ($i=1$i<=5$i++) print "<option ".$sel[sprintf("%02d"$i)].">"
PS Да, и не обижай меня.. я проверяю примеры, перед постом... снимая комментарии всё работает
sky7 вне форума  
Старый 04.04.2004, 05:05     # 15
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
sky7
Спасибо.
Еще одна вещь, которой я не знал - что массив можно индексировать числами или строками. думал - числа всегда есть числа

кроме того, чего вдруг sprintf возвращает строку? ведь то что он возвращает есть число.

а что ты называешь плохим стилем?
Psionic Vision вне форума  
Старый 04.04.2004, 05:22     # 16
sky7
Member
 
Аватар для sky7
 
Регистрация: 02.05.2003
Адрес: Бельгия
Сообщения: 201

sky7 Путь к славе только начался
Цитата:
Первоначальное сообщение от Neo
кроме того, чего вдруг sprintf возвращает строку? ведь то что он возвращает есть число.
Цитата:
php.net: http://be2.php.net/manual/en/function.sprintf.php
sprintf
(PHP 3, PHP 4 )
sprintf -- Return a formatted string
Description
string sprintf ( string format [, mixed args])
Цитата:
Первоначальное сообщение от Neo
а что ты называешь плохим стилем?
В данной ситуации то, что ведёт к нечитаемому коду и ошибкам работы с типами. Как то вышеупомянутое преобразование из строки в имя переменной, или индексация строками, содержащими числа.. список этим не ограничевается, где найти полную версию - не знаю (;

Всегда пожайлуста
sky7 вне форума  
Старый 04.04.2004, 23:54     # 17
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
Всем спасибо. Вот что у меня получилось: (конечно сложно читать но что ж поделаешь я не мастер языка пхп - пока что )

PHP код:
<?php
$lastnum
=14// ЭТО ЧИСЛО Я МЕНЯЮ ВРУЧНУЮ С КАЖДЫМ ВЫПУСКОМ
$yr2003 4
$yr2004 $lastnum

$yr=2004;
$n=10;

for(
$z=2003$z<$yr$z++) $total+=${"yr$z"}; // ВЫЧИСЛЯЮ КОЛИЧЕСТВО ВЫПУСКОВ ВО ВСЕ ГОДА ПЕРЕД ДАННЫМ
$total += 1// И ПРИБАВЛЯЮ ЕДИНИЦУ - ЧИСЛО СЛЕД. ВЫПУСКА

$sel[sprintf("%02d"$n)]="selected"// ВЫБР. ЧИСЛО ВЫДЕЛЯЕТСЯ

print "<select>";
for (
$i=1$i<=${"yr$yr"}; $i++) {
print 
"<option ".$sel[sprintf("%02d"$i)]." value=$i>".sprintf("%02d"$i)." [".sprintf("%03d"$total)."]</option><br>\n"// ФОРМИРУЮ СТРОКУ, ТАКУЮ КАК ПИСАЛ ВЫШЕ
$total += 1// И ПРИБАВЛЯЮ ОДИН ДЛЯ ИСПОЛЬЗОВАНИЯ В СЛЕДУЮЩЕМ КРУГЕ (ЕСЛИ ТАКОЙ ПОСЛЕДУЕТ)
}
print 
"</select>";
?>
можно ли это как то оптимизировать
Psionic Vision вне форума  
Старый 05.04.2004, 03:08     # 18
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
В чем ошибка?

<?php
$year[2003]="selected";
$year[2004]="selected";

for ($i = 2003; $i <= 2005; $i++) {
var_dump (${"year[$i]"}); // NULL
}

?>
Psionic Vision вне форума  
Старый 05.04.2004, 09:53     # 19
mmaaxx
Junior Member
 
Регистрация: 08.10.2003
Сообщения: 98

mmaaxx Известность не заставит себя ждать
Neo
<?php
$year[2003]="selected";
$year[2004]="selected";

for ($i = 2003; $i <= 2005; $i++) {
var_dump (${"year"}[$i]); // NULL
}

?>
mmaaxx вне форума  
Старый 05.04.2004, 16:48     # 20
Psionic Vision
Full Member
 
Аватар для Psionic Vision
 
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110

Psionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собойPsionic Vision Имеются все основания чтобы гордиться собой
mmaaxx
Ошибаисси. Не работает или ты не понял чего я хочу. работает так:

<?php
$year[2003]="selected";
$year[2004]="selected";

for ($i = 2003; $i <= 2005; $i++) {
var_dump ($year[$i]); // selected, selected, NULL
}

?>
Psionic Vision вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

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


Часовой пояс GMT +4, время: 02:25.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.