запись в файл ссылок на значения, а не сами значения.

KR

alive in new life
запись в файл ссылок на значения, а не сами значения.

народ есть скажем массив

$test = array(
0 => 'test1',
1 => 'test2',
2 => 'test3'
);

есть другой массив

$result = array(
0 => &$test[0],
1 => array(
0 => &$test[1],
),
2 => &$test[2],
);

необходимо грамотно сохранить массивы в файл, для того, чтобы их можно было просто заинклюдить из этого файла.
в файле должны выглядеть именно так, как в примере (т.е. именно ссылки)

Зачем это нужно:
массив $test будет выводится на основе вида многомерного массива (произвольной размерности) $result;
Значения элементов $test могут лего изменяться, очень нехочется каждый раз заново генерить $result, поскольку оба массива могут быть достаточно большими, а меняться будет только однин конкретный элемент исходного массива

пробовал использовать var_export() и serialize()
даже если пробегать по массиву и пытаться генерить код "ручками", то мы все равно будем получать значения, а не ссылки на них.
 

Кром

Новичок
Какое-то шаманство, честное слово. Файл в котором ты собираешся все это хранить - это файл с данными или скрипт?
Если с данными, то и храни там данные.
Если скрипт - храни скрипты. А то что ты пытаешся сделать это неправильная логика построения программы.
Не надо так делать.
 

KR

alive in new life
уже понял
мне никто не мешает записать так

$test = array(
0 => 'test1',
1 => 'test2',
2 => 'test3'
);

$result = array(
0 => $test[0],
1 => array(
0 => $test[1],
),
2 => $test[2],
);

результат будет таким же.

на самом деле это получился вопрос автоматической генерации кода ПХП средствами самого ПХП, поскольку приведенный выше код логически верен (с точки зрения ПХП).

и все-таки иногда полезно взглянуть на свою проблему глазами стороннего наблюдателя
спасибо что форум помог мне прозреть %)
 

D!!!

Новичок
Мужики, чтобы разобраться с этой фишкой нужно изучить чуть с++.
Тут (в PHP) также как и в с++, ссылка на переменную показывает номер ячейки оперативной памяти (адресс) в которой хранится эта переменная или ее первый символ. При каждой новой загрузке эта ссылка меняется, и врядли когда-либо повторится! Поэтому сохранять ссылки на переменные не то что нет смысла, а вообще не возможно.
 

Crazy

Developer
При этом если изучать не просто С++, а программирование вне привязки к языкам, то станет известно, что есть стандартные способы сериализации ссылочных структур... :)
 

D!!!

Новичок
Объсни.

Автор оригинала: Crazy
При этом если изучать не просто С++, а программирование вне привязки к языкам, то станет известно, что есть стандартные способы сериализации ссылочных структур... :)
Объясни, пожалуйста, что это значит, я не совсем понял
 

Crazy

Developer
Объясняю: существуют алгоритмы сериализации (сохранения в файле, к примеру) структур, содержащих взаимные ссылки.

Подробности ты найдешь в книжках.
 

KR

alive in new life
Автор оригинала: D!!!
Мужики, чтобы разобраться с этой фишкой нужно изучить чуть с++.
Тут (в PHP) также как и в с++, ссылка на переменную показывает номер ячейки оперативной памяти (адресс) в которой хранится эта переменная или ее первый символ. При каждой новой загрузке эта ссылка меняется, и врядли когда-либо повторится! Поэтому сохранять ссылки на переменные не то что нет смысла, а вообще не возможно.
Вся фишка как раз и состоит в том, что если есть понятие ссылок, то они как-то записаны в коде. Другое дело, что этот код пишет программист вручную.
Задача как раз и сводится к тому, чтобы переложить это на плечи PHP.
Тем более, что с точки зрения PHP приведенный в первом посте код синтаксически верен и будучи записан в один файл (массивы должны быть записаны именно в этом порядке) будет успешно выполнени.
Соответственно, будут созданы необходимые ссылки.
 

eXed

Guest
работая с Си++ несколько лет - в школе , потом в иституте ... нашел только один качественный способ для применения ссылок.

#include <conio.h>
#include <stdio.h>
#include <bios.h>

#include "tkeys.h"

void cur_move(int *x, int *y);
main(){
clrscr();
int step = 0, x = 1, y = 1;
do{clreol(); gotoxy(2, 24); cprintf("Введите шаг курсора [-5 <= n <= 5]: ");
cscanf(" %2d", &step); }while((step > 5) || (step < -5));

_setcursortype(_NOCURSOR); textbackground(15);
textcolor(RED); clrscr();
int key = 0; cur_move( &x, &y);
while( key != kbEsc)
{ if(bioskey(1) != 0)
{ key = bioskey(0);
switch(key)
{
case kbUp: y-=step; break;
case kbDown: y+=step; break;
case kbLeft: x-=step; break;
case kbRight: x+=step; break;
case kbEnter:{
do{clreol(); gotoxy(2, 24);
cprintf("Введите шаг курсора [-5 <= n <= 5]: " ); cscanf(" %2d", &step);
}while((step > 5) || (step < -5));
}break;
default: break;
} cur_move( &x, &y);
}
}
_setcursortype(_NORMALCURSOR);
textbackground(0);
textcolor(7); clrscr();
gotoxy(1, 24); cprintf("\n 6 вариант , выполнил: Марковский П.А.");
return 0;}

void cur_move(int *x, int *y) - вот он.
{ clrscr();
if(*x < 1) {*x = 1; *y = 12;}
if(*x > 79){*x = 1; *y = 12;}
if(*y < 1) {*x = 1; *y = 12;}
if(*y > 24){*x = 1; *y = 12;}
gotoxy(*x, *y); cprintf("??");
gotoxy(*x, *y+1); cprintf("??");
gotoxy(1, 25); cprintf("[Escape - Выход] [Enter - step change] %d-%d", *x, *y);
}
 

Crazy

Developer
Автор оригинала: eXed
работая с Си++ несколько лет - в школе , потом в иституте ... нашел только один качественный способ для применения ссылок.
Что именно в твоем коде призвано было иллюстрировать "качественный способ для применения ссылок"? :)
 
Сверху