Разыменование ссылок внутри массива?

surg30n

Новичок
Разыменование ссылок внутри массива?

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

Пример кода.
PHP:
$a = array();

$a[0]=array('id'=>1, 'ptr'=>null);
$a[1]=array('id'=>2, 'ptr'=>&$a[0]);
$a[2]=array('id'=>3, 'ptr'=>&$a[1]);

$b=$a; // конечно не работает, ссылки внутри остались

var_dump($b); 

// бредовое решение

function stupid_unpack($v) {
    $eval_sz = '$ret = ' . base64_decode($v) . ';';
    @eval( $eval_sz );
    return $ret;
}

function stupid_pack($v) {
   $ret = var_export($v,TRUE);
   $ret = base64_encode($ret);
   return $ret;
}

$c = stupid_unpack(stupid_pack($a)); // работает

var_dump($c);
Вопрос: Как сделать это правильным способом? :rolleyes:
 

hermit_refined

Отшельник
ух. а зачем тут base64?
вообще можно рекурсивно обойти foreach'ем (или array_map, может быть).
но правильно - не иметь таких потребностей.
 

surg30n

Новичок
dark-demon ,
serialize не будет работать

hermit_refined,
base64+var_export+eval ~ чудо аналог un/serialize...
 
Сверху