Замена элементов в многомерном массиве

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

$a = array (
  'bob' => 'Bob MEN',
  'google' => array (
      'somekey' => 'somevalue',
      'bob'     => 'big man'
  ),
  'martin' => array(
      'bob'     => array(
      'friend' => true,
      'age'    => 100500,
      'hop'    => 'bob'),
      'cat'     => 'animal',
      'tut'    => 'bob',
  )
);

$a = serialize($a);

$f = 'bob';
$q = 's:'.strlen($f).':"'.$f.'";';

$e = 'new_bob';
$s = 's:'.strlen($e).':"'.$e.'";';

$a = strtr($a, [$q => $s]);
print_r(unserialize($a));

/*
Array
(
    [new_bob] => Bob MEN
    [google] => Array
        (
            [somekey] => somevalue
            [new_bob] => big man
        )

    [martin] => Array
        (
            [new_bob] => Array
                (
                    [friend] => 1
                    [age] => 100500
                    [hop] => new_bob
                )

            [cat] => animal
            [tut] => new_bob
        )

)
*/

Мне интересно, является ли такой подход разумным или могут быть проблемы? Разделитель всегда строка. Конечно можно все массивы сложить в один и его уже сериализовать, а не много мелких, но в этом случае при повреждении файла я потеряю все данные в файле, а восстановливать их придётся долго. Использовать рекурсивный подход кажется накладным и как заменить ключ и значение даже не знаю.


Ответы (0 шт):