2010-07-28 5 views
0

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

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

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

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

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

Он отлично подходит для булеров, строк, целых чисел, поплавков и т. Д. Но когда дело доходит до массивов, по умолчанию он просто записывал бы «Array» в файл вместо «array ('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'),))

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

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

Cheers.

ответ

1

Попробуйте

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

Пример из PHP Manual:

$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 Reading File о том, как использовать это в классе конфигурации.

+0

var_export хорош, но это не так чисто, как я надеялся. Но если моя функция действительно не будет хорошей, я думаю, мне, возможно, придется согласиться на var_export. –

0

Что вы ищете serialize() и его коллега unserialize()

+0

Я ознакомился с сериализацией, но конечный пользователь может изменить переменную вручную в файле конфигурации. Переменные записываются в файле конфигурации следующим образом: 'Config :: write ('Plugin.load', array ('geshi/geshi'));' Я хочу иметь возможность записывать в файл конфигурации таким же образом. –

+0

Сериализация - лучший выход из коробки. Если вам нужен более индивидуальный вывод, вам нужно будет написать функцию для преобразования массива в нужный результат. –

+0

@Jason Lewis: Тогда я думаю, что 'var_export()' или 'json_encode()' являются лучшими решениями OOTB для вас, как указано выше. –

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

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

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

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

Смежные вопросы