【问题标题】:How to transform a string that contains a nested array into an actual array?如何将包含嵌套数组的字符串转换为实际数组?
【发布时间】:2016-08-16 00:43:23
【问题描述】:

我正在尝试找到一种将字符串类型变量转换为数组类型变量的方法。更准确地说,我正在寻找的是这个(示例)的变化:

$v = "['1', 'a', ['2', 'b', ['3'], 'c']]";

请注意,这不是 json 格式的字符串。 进入这个:

$v = ['1', 'a', ['2', 'b', ['3'], 'c']];

注意第一个例子中的双引号,$v 是一个字符串,而不是一个数组,这是想要的效果。

【问题讨论】:

  • 第二个提示:parse
  • 单引号在 JSON 中无效,因此在这里没有帮助。如果你在字符串中有 PHP 数组语法,你需要使用 eval(),这太可怕了。
  • 没有有效的 json 架构
  • @iainn 你是对的,json parse 根本没有帮助我,简单地使用 eval 也行不通。我认为它需要一些复杂的解析和评估组合

标签: php string parsing multidimensional-array


【解决方案1】:

使用str_replace(准备解码)和json_decode函数的简单解决方案:

$v = "['1', 'a', ['2', 'b', ['3'], 'c']]";
$converted = json_decode(str_replace("'",'"',$v));

print_r($converted);

输出:

Array
(
    [0] => 1
    [1] => a
    [2] => Array
        (
            [0] => 2
            [1] => b
            [2] => Array
                (
                    [0] => 3
                )

            [3] => c
        )    
)

【讨论】:

    【解决方案2】:
    $v = "['1', 'a', ['2', 'b', ['3'], 'c']]";
    
    eval("\$v = $v;");
    
    var_dump($v);
    

    PS:确保 $v 字符串不包含意外代码。

    【讨论】:

    • 感谢您的回答!提供的代码有效,但我选择使用 Romans 的解决方案来避免使用 eval 函数
    • 不客气,你更喜欢 json_decode 解决方案而不是 eval 是对的。
    【解决方案3】:

    这应该可行:

    $json = "['1', 'a', ['2', 'b', ['3'], 'c']]";
    $json = str_replace("'",'"',$json);
    $result_array = json_decode($json); // This is your array
    

    【讨论】:

      猜你喜欢
      • 2015-05-25
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      相关资源
      最近更新 更多