Forum Webscript.Ru

Программирование => PHP => Тема начата: КубанГ от 22 Января 2006, 05:52:45

Название: Динамическая переменная в IF
Отправлено: КубанГ от 22 Января 2006, 05:52:45
Привет, вопрос:

Подскажите пожалуйста, каким образом можно динамически подставлять переменную в if, когда один из параметров для сравнения передаётся за пределами функции. Мне сложно объяснить, посмотрите код. Я хотел сделать так, чтобы 4 раза не создавать условие, отдельно для kids_status, отдельно для parents_status и т. д. При этом название категорий будет использоваться и в дальнейшем, поэтому желательно заранее определить их, а семантически зависимые от них переменные создавать методом подстановки к исходному.

function status (parents_status, kids_status, ...) {
$category = array ("kids", "parents", "leader", "about");
 if ("$" . $category["здесь перебор массива"] . "_status" == 1){
 echo ("" . "и" . php-код);
}
}
status (1);

"$" . $category["здесь перебор массива"] . "_status" == 1
Здесь, конечно же ничего не работает:
"$" . $category["здесь перебор массива"] . "_status" равно на самом деле "$kids_status" (и

т. д.)
Название: Динамическая переменная в IF
Отправлено: Меняздесьдавнонет от 22 Января 2006, 09:38:36
надеюсь, когда ты проснёшься, то сам поймёшь, что это бред.
Название: Динамическая переменная в IF
Отправлено: Меняздесьдавнонет от 22 Января 2006, 09:44:09
зачем тебе вообще знать имена переменных?
зачем что-то подставлять, собирать из кусков?
надо тебе перебрать все переданные функции параметры - ну так перебирай! Вообще не зная их имён.
Название: Динамическая переменная в IF
Отправлено: КубанГ от 23 Января 2006, 10:05:11
Цитировать
RomikChef:
надеюсь, когда ты проснёшься, то сам поймёшь, что это бред.

Мне казалось, что если бы это сработало, то было бы очень элегантным :) решением (во всяком случае для меня). Но я понял, о чём ты говоришь (надеюсь что). Смотри:

function status () {
for ($i = 0; $i <= 3; $i++) {
if (func_get_arg($i) == 1){
echo ("" . "и" . php-код);
}
}
}
status (1, 1, 1, 0);
Самое интересное, что это работает ^_^
Название: Динамическая переменная в IF
Отправлено: Меняздесьдавнонет от 23 Января 2006, 12:10:32
функция не должна выводить html код
ты создаёшь чудовищное в плане поддержки приложение.
Название: Динамическая переменная в IF
Отправлено: КубанГ от 23 Января 2006, 12:21:21
Цитировать
RomikChef:
функция не должна выводить html код ты создаёшь чудовищное в плане поддержки приложение.

В таком случае я могу вынести весь html за пределы функции, но, например, то, что я называю php-код это тоже по сути чистый html, просто "занесённый" в переменную. Насколько это будет менее вульгарно? То, что я пытаюсь сделать -- меню для сайта, которое может различаться для каждой отдельной странички. Возможно стоит попробовать Java Script, но в нём я разбираюсь ещё хуже.
Название: Динамическая переменная в IF
Отправлено: КубанГ от 31 Января 2006, 12:33:03
Ещё один вопрос в тему. А что если нужно работать с многомерным массивом? Каким образом

можно сделать его перебор в зависимости от условий?

$abc = array (
"one" => array ("a1", "a2", "a3"),
"two" => array ("b2", "b2"),
"three" => array ("c1", "c2")
);  
И работать с ним по тому же принципу:
 if ($i эллемент, переданый через функцию = 1) {
   вывести $i эллемент многомерного массива,оформленный так-то и плюс всё, что внутри него самого (этого массива в массиве) }
else  {
   вывести этот же эллемент многомерного массива, оформленный по другому и
    if ( $число, иереданное через функцию = $порядковый номер эллемента вложенного массива) { плюс к нему, всё, что внутри него, но так же в зависимости от  условия, когда один из элементов уже второго массива отображается  отлично от остальных эллементов этого же массива (в частности из  него, например, вырезаются все html-теги)

Вот такая заковырка. Каким образом это организовать -- ума не приложу. Думал и так и так.

 foreach ($this->menu as $cKey => $category) {
echo ("

" . $cKey . "

");
foreach ($category as $link) {
echo ($link);
}
}
Но здесь невозможно сделать вывод в зависимости от условий (я пробовал -- не получилось).
Название: Динамическая переменная в IF
Отправлено: CGVictor от 31 Января 2006, 14:01:11
КубанГ
$array = array(...);
$num = 1;
for($i=0;$i  for($j=0;$j    if($j==$num) { //или что угодно
      echo($i." ".$j." !!!\\n");
      //do some shit
    } else {
      echo($i." ".$j."\\n");
      //do other shit
    }
  }
}

А вообще - банально почитать любые книги по программированию.
Название: Динамическая переменная в IF
Отправлено: КубанГ от 01 Февраля 2006, 10:34:46
CGVictor
Прости, но ты меня не совсем правильно понял (и уж совершенно зря запозорил :() Тут моя вина: в следующий раз мне нужно более точно изъясняться. На самом деле проблема не в том, чтобы просто перебрать массивы в массиве и вывести цифры, соответствующие порядковым номерам эллементов этих массивов. Я не могу понять, каким образом вывести значения этих элементов. И если ещё возможно отобразить первый массив (см. код, впрочем, хотелось больше автоматизации) (таким образом, как ты показал -- на самом нельзя, т. к., например, первый эллемент массива это не "1", а "One" и потому простая подстановка array[$i] не подходит). А со вложенными массивами ещё сложнее (во всяком случае для меня). А твой код более "жизненно" выглядит так:
function status ($link)
{
$array = array (
        "one" => array ("a1", "a2", "a3"),
        "two" => array ("b2", "b2"),
        "three" => array ("c1", "c2")
    );
for($i = 0; $i < count($array); $i++) {
$category = array ("One", "Two", "Three");
if (func_get_arg($i) == 1){
echo ("

" . $category[$i] . "

");
for($j = 0; $j < count($array[$i]); $j++) {
echo ($j . "
");
}
}
else{
echo ("

" . $category[$i] . "

");
for($j = 0; $j < count($array[$i]); $j++) {
if($link == $j) {
  echo ($j . "
");
  }
else {
echo ("" . $j . "
");
}
}
}
}
}
status (1, 0, 1, $link = 2);

Важно, чтобы итоговый вывод в браузер был таким:
One
  a1
  a2
  a3
Two
  b1
  ...

Извини, если я опять чего-то не понял :)
Название: Динамическая переменная в IF
Отправлено: Меняздесьдавнонет от 01 Февраля 2006, 10:42:27
Цитировать
КубанГ:
Но здесь невозможно сделать вывод в зависимости от условий

каких ещё условий?
Название: Динамическая переменная в IF
Отправлено: КубанГ от 01 Февраля 2006, 10:47:20
CGVictor
Цитировать
CGVictor:
А вообще - банально почитать любые книги по программированию.

[OFF]На самом деле у такого большого ламо как я, который садится за PHP, когда припрёт есть тоже очень большой учебник, который называется "Professional PHP4". С какого перепуга я его купил -- не знаю (но купил). И в критические моменты своей жизни я открываю этот талмуд и умилённо смотрю целыми днями, как баран на  новые ворота...

Вот такая печальная история...[/OFF]
Название: Динамическая переменная в IF
Отправлено: Меняздесьдавнонет от 01 Февраля 2006, 10:48:58
ты путаешь учебник со справочником.
Учебник открывают не в тяжкую годину.
а заранее.
чтобы научиться делать то, что ты собрался делать.

А столкнувшись с конкретной проблемой, лезут в справочник.
Название: Динамическая переменная в IF
Отправлено: КубанГ от 01 Февраля 2006, 10:52:55
RomikChef
Цитировать
RomikChef:
каких ещё условий?

Я имел ввиду то, что когда пытаешься написать примерно следующее:
if (func_get_arg($i) == 1){
   foreach ($this->menu as $cKey => $category) {
        echo ("

" . $cKey . "

");
            foreach ($category as $link) {
            echo ($link);
            }
        }

То в браузер выводится всё по 4 раза!  И как этим управлять, я не понимаю.
Название: Динамическая переменная в IF
Отправлено: КубанГ от 01 Февраля 2006, 11:02:20
RomikChef
Цитировать
RomikChef:
А столкнувшись с конкретной проблемой, лезут в справочник.

[OFF]Я не думаю, что я уж настолько плох в программировании (хе-хе :)), чтобы не научиться пользоваться тем, что я понимаю и тогда, когда знаю, что и где применять. Справочник в этом определённо помогает. Но когда просто не знаешь, как действовать в той или иной ситуации и за ответами лезешь в учебник, а том всё на более или менее на общих примерах... Опыта, конечно, маловато, но чтобы его набираться надо программировать хотя бы чаще, чем раз в квартал![/OFF]
Название: Динамическая переменная в IF
Отправлено: CGVictor от 01 Февраля 2006, 11:29:41
КубанГ
Цитировать
КубанГ:
Я не могу понять, каким образом вывести значения этих элементов.

Совсем ничего я уже тут не понимаю.
используй array_keys() и обращайся $array[$keys[$i]]...или опять не то?
Название: Динамическая переменная в IF
Отправлено: КубанГ от 01 Февраля 2006, 12:06:22
CGVictor
Цитировать
CGVictor:
используй array_keys() и обращайся $array[$keys[$i]]...или опять не то?

Надо обмозговать...
Цитировать
CGVictor:
Совсем ничего я уже тут не понимаю.

Просто в итогом должен быть следующий вывод в браузер:
One
а1 (http://#)
а2 (http://#)
а3 // без ссылки, потому что $link = 2 (3 эллемент в массиве)
Тwо
b1 (http://#)
b2 (http://#)
Three
c1 (http://#)
c2 (http://#)

Чёрт, ну я и намудрил! Может есть способ попроще ^_^? Это же меню по типу раскрывающегося списка. Есть три категории и в каждой несколько ссылок. Если раздел на сайте одной из категорий (списка) уже загружен  -- значит у неё не должно быть возможности открываться/закрываться -- список неактивен. И не активна ссылка, которая ссылается на загруженую страницу! Ведь всё так просто :)! Уфф. "Вся королевская конница, вся корлевская рать..."
Просто на каждой странице я не хочу выводить меню руками (вдруг надо будет изменить что-то -- значит придётся менять на каждой странице), а просто написать status (1,1,0, $link = 2), что будет означать: 1, 2 разделы -- активны, 3 -- нет и в нём не активна 3 ссылка.

Извините, что огород нагородил.
Название: Динамическая переменная в IF
Отправлено: Меняздесьдавнонет от 01 Февраля 2006, 14:13:04
Цитировать
КубанГ:
То в браузер выводится всё по 4 раза!

то есть, у тебя 4 условия, 4 цикла, и ты спрашиваешь, почему выводится 4 раза???

Цитировать
КубанГ:
Я не думаю, что я уж настолько плох в программировании

ты просто ЧУДОВИЩНО заблуждаешься
Название: Динамическая переменная в IF
Отправлено: КубанГ от 01 Февраля 2006, 18:46:11
Цитировать
RomikChef:
ты просто ЧУДОВИЩНО заблуждаешься

Я надеюсь, что ты хотел сказать, что я слишком строг к себе, недооцениваю свои способности...
Название: Динамическая переменная в IF
Отправлено: Меняздесьдавнонет от 01 Февраля 2006, 20:47:27
как угодно.

собственно, если человек не способен вставить условный переход внутрь цикла, то о способностях тут вообще речь не идёт.
а ноль ты можешь хоть недооценивать, хоть переоценивать.
Название: Динамическая переменная в IF
Отправлено: КубанГ от 02 Февраля 2006, 09:19:38
RomikChef
Цитировать
RomikChef:
собственно, если человек не способен вставить условный переход внутрь цикла, то о способностях тут вообще речь не идёт.

[OFF]Не буду оправдываться, хотя бы потому что незачем. Ты суров, но справедлив Но всё равно немного строг (а где позитивим, вера в коллективный разум, идеи Вернатского? Вот так всё лучшее пропадает в профессионализме!). Ну ты хотя бы веришь в моё светлое будущее? Впрочем, это не имеет к теме никакого отношения (но всё равно спасибо за замечания) (вот порадуется тот, кто действительно захочет научиться и зайдёт сюда). Я попробую разобраться с тем, что заварил.[/OFF]
RomikChef
CGVictor:
Спасибо, ребята, я, наверное, уже на полпути к просветлению благодаря вам :)!