Forum Webscript.Ru

Программирование => PHP => Тема начата: AlieN от 11 Июня 2003, 13:44:12

Название: Проблема с ссылками ($$)
Отправлено: AlieN от 11 Июня 2003, 13:44:12
Имеем вот такой код:

$arr=array("4","6","9","12","18","24","36");
ob_start();
print_r($zrow);
fwrite($fp,ob_get_contents());
ob_end_clean();
for($i=0;$i {
$val1="zrow[stend_".$arr[$i]."r]";
$val2="zrow[stend_".$arr[$i]."u]";
if($arr[$i]=="36"){$val3="zrow[stend_".$arr[$i]."o]";}else{$val3="";}
if($$val1=="yes" or $$val2=="yes" or $$val3=="yes")
{
$pdf->SetWidths(array(50,20,20,22,22,22,25));
$pdf->Row(array("Стенд $arr[$i] кв.м","_","_","_","_","_","_"));
}
fwrite($fp,"$$val1-".$$val1.":::");
fwrite($fp,"$$val2-".$$val2.":::");
fwrite($fp,"$$val2-".$$val3."\\r\\n");
}
fclose($fp);

Test.txt:

Array
(
    [id] => 6
    [user_id] => 4
    [status] => no
    [orgnazv] =>
    [stend_4r] => yes
    [stend_4u] => no
    [stend_6r] => no
    [stend_6u] => yes
    [stend_9r] => yes
    [stend_9u] => no
    [stend_12r] => no
    [stend_12u] => yes
    [stend_18r] => yes
    [stend_18u] => no
    [stend_24r] => no
    [stend_24u] => yes
    [stend_36r] => yes
    [stend_36u] => no
    [stend_36o] => yes
    [neobpl] => -15
    [zaoch_uch] => yes
    [akkredit] => -12
    [present] => a
    [reclama] => 600
    [date] => 2003-06-11 13:33:47
)
$zrow[stend_4r]-:::$zrow[stend_4u]-:::$-

$zrow[stend_6r]-:::$zrow[stend_6u]-:::$-

$zrow[stend_9r]-:::$zrow[stend_9u]-:::$-

$zrow[stend_12r]-:::$zrow[stend_12u]-:::$-

$zrow[stend_18r]-:::$zrow[stend_18u]-:::$-

$zrow[stend_24r]-:::$zrow[stend_24u]-:::$-

$zrow[stend_36r]-:::$zrow[stend_36u]-:::$zrow[stend_36o]-

Если кто не понял, то обяъсню, значение по ссылке не выводиться
Название: Проблема с ссылками ($$)
Отправлено: Меняздесьдавнонет от 11 Июня 2003, 14:50:57
ссылка - это &$
а $$ - это переменная переменная.

банальнейшая задача для отладки.
вывести $var и посмотреть, что в ней, и чем отличается от того, что должно быть
Название: Проблема с ссылками ($$)
Отправлено: AlieN от 11 Июня 2003, 15:40:13
RomikChef
Ты можешь на примере пояснить а не бонально языком чесать?
Название: Проблема с ссылками ($$)
Отправлено: Меняздесьдавнонет от 11 Июня 2003, 16:10:54
если в переменной чего-то нету, то надо вывести на экран все те переменные, из которых получается ее значение.
И посмотреть - в какой момент значение пропадает.
Этот процесс называется "отладка", и обычно программисты делают его сами, а не ходят на форум, чтобы кто-то это сделал за них.

а вообще с массивами variable vriable не проходят.

этот код вызывает у меня неприятные ощущения.
пусть в нем кто-нибудь другой копается.
Название: Проблема с ссылками ($$)
Отправлено: AlieN от 11 Июня 2003, 16:44:52
[moderated]

PS: админам, пожалуйста удалите все кроме первой мессаги

[AliMamed]не вижу причин модерировать чтолибо кроме содержания этого поста[/AliMamed]
Название: Проблема с ссылками ($$)
Отправлено: FreeSpace от 11 Июня 2003, 20:07:33
AlieN
RomikChef прав, тут всё упирается именно в отладку.
Прокопался в этом коде где-то минут 20, так и не понял, почему не работает. Скорее, в качестве переменной с именем переменной нельзя использовать массивы вместе с ключами. Но решение есть и оно достаточно очевидное:
eval("fwrite($fp,"$$val1-".$$val1.":::");");
Только перед этим выше поменяй
$val1="zrow[stend_".$arr[$i]."r]";
и ему подобные на
$val1="zrow[$stend_".$arr[$i]."r]";
Поиграйся с этим и настрой, как надо. Просто у себя я тестировал не на fwrite, а на echo. У меня работало так:
eval("echo $val1;");
Выводились значения массива с такими ключами:
Цитировать
$zrow[\'stend_4r\']
$zrow[\'stend_6r\']
$zrow[\'stend_9r\']
$zrow[\'stend_12r\']
$zrow[\'stend_18r\']
$zrow[\'stend_24r\']
$zrow[\'stend_36r\']

С eval() главное не запутаться в эскейпинге спецсимволов!

PS: Правильнее будет обозначать ключи массивов как $array[\'key\'], а не $array[key]...
Название: Проблема с ссылками ($$)
Отправлено: AlieN от 14 Июня 2003, 13:10:18
Получилось вот так:

eval("\\$val1=\\$zrow[\\"stend_".$arr[$i]."r\\"];");
eval("\\$val2=\\$zrow[\\"stend_".$arr[$i]."u\\"];");
if($arr[$i]=="36"){eval("\\$val3=\\$zrow[\\"stend_".$arr[$i]."o\\"];");}

Странно почему через ссылки не работает
Название: Проблема с ссылками ($$)
Отправлено: FreeSpace от 14 Июня 2003, 14:26:14
AlieN
Я вроде прочитал в user comments\'ах, что с ключами массивов variable variables не работают :(