Создать строковую версию массива - PullRequest
0 голосов
/ 28 июля 2010

Я не знаю, объясняет ли заголовок это очень хорошо, поэтому вот что я пытаюсь достичь.

С помощью этого скрипта люди могут на лету изменять значение переменных конфигурации следующим образом:

Config::write('General.load', array('plugin1','plugin2'), true);

В этом примере он изменяет переменную конфигурации General.load на массив и устанавливает для третьего параметра значение true, что означает, что его можно сохранить.

Я пытаюсь включить метод сохранения, когда пользователь вызывает Config::save(), он перебирает все переменные конфигурации, для которых записан третий параметр, для которого установлено значение true.

Он отлично работает для логических значений, строк, целых чисел, чисел с плавающей запятой и т. Д. Но когда речь идет о массивах, по умолчанию он просто записывает в файл «массив», а не «массив» («plugin1», «plugin2») ».

Итак, я начал разработку небольшого скрипта, который конвертирует массивы в массив на основе строк.

Вот функция (мне пришлось поместить ее на pastebin, отформатированный здесь странно): http://pastebin.com/HsUG9n5D

Работает, до некоторой степени.

Если вы поставите что-то вроде этого:

$array_to_string = '';
$array = array(
    'welcome',
    'to',
    'my',
    array('website')
);
array_build($array_to_string, $array, 0);
die($array_to_string);

Будет выведено:

array('welcome', 'to', 'my', array('website')),

Это почти сработало. Однако, если я введу что-то вроде этого:

$array_to_string = '';
$array = array(
    'welcome',
    'to',
    'my',
    array('website'),
    array(array('goodbye', 'foo' => 'bar'))
);
array_build($array_to_string, $array, 0);
die($array_to_string);

Вывод:

array('welcome', 'to', 'my', array('website')array(array('goodbye', 'foo' => 'bar'), ))

Я перебрал код, и я не совсем уверен, что я могу сделать, чтобы это исправить. Ссылка на переменную для меня все еще немного сложна.

Если у кого-то есть идеи о том, что я сделал неправильно, сообщите нам.

Приветствие.

Ответы [ 4 ]

2 голосов
/ 28 июля 2010
  • var_export () хорошо, если вы хотите сохранить его как строку, которая на самом деле является действительным PHP и может быть проанализирована как таковая.

    Это наиболее близко соответствует вашему примеру.

  • serialize () и unserialize () хороши для внутреннего хранения массива в виде строки в вашем PHP применение.

  • json_encode () и json_decode () хороши, когда требуется совместимость с другими языками, или другие версии / сборки PHP или хранящиеся в постоянном хранилище и т. д. для максимальной переносимости ваших данных.

1 голос
/ 28 июля 2010

Попробуйте

  • var_export - Выводит или возвращает анализируемое строковое представление переменной

Пример из руководства по PHP:

$a = array (1, 2, array ("a", "b", "c"));
var_export($a);

// output

array (
  0 => 1,
  1 => 2,
  2 => 
  array (
    0 => 'a',
    1 => 'b',
    2 => 'c',
  ),
)

См. Мой ответ на Файл чтения PHP о том, как использовать это в классе конфигурации.

0 голосов
/ 28 июля 2010

Возможно, вы захотите попробовать пакет Pear Config .

0 голосов
/ 28 июля 2010

Что вы ищете, это serialize () и его аналог unserialize ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...