代码之家  ›  专栏  ›  技术社区  ›  Jason Lewis

创建数组的字符串版本

  •  0
  • Jason Lewis  · 技术社区  · 16 年前

    我不知道标题是否能很好地解释这一点,所以下面是我要实现的目标。

    使用此脚本,人们可以像这样动态地更改配置变量的值:

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

    在该示例中,它将general.load config变量更改为数组,并将第三个参数设置为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'), ))

    我已经看过代码了,我不太确定我能做些什么来修复它。变量引用对我来说仍然有点复杂。

    如果有人知道我做错了什么,请告诉我们。

    干杯。

    4 回复  |  直到 16 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    尝试

    • 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 Reading File 关于如何在配置类中使用它。

        2
  •  2
  •   thomasrutter    16 年前
    • var_export () 当您想将它保存为一个实际上是有效的PHP并且可以这样解析的字符串时,这是很好的。

      这似乎最符合您的示例。

    • serialize () unserialize () 很好地将数组作为字符串存储在PHP应用程序内部。

    • json_encode () json_decode () 当它需要与其他语言或其他版本/版本的PHP互操作时,或者需要存储在持久存储中时,它是很好的,这样可以最大限度地提高数据的可移植性。

        3
  •  0
  •   Dennis Haarbrink    16 年前

    你要找的是 serialize() 和它的对应物 unserialize()

        4
  •  0
  •   Mike    16 年前

    你可能想试试 Pear Config 包裹。