【问题标题】:Convert array string to array [closed]将数组字符串转换为数组[关闭]
【发布时间】:2026-01-04 07:50:01
【问题描述】:

我想像这样转换数组字符串

[["a","b",["c1","c2"]],"d",["e1","e2"]]

在 PHP 中放入一个数组。

有什么办法吗?

【问题讨论】:

  • 数组字符串?结果你想要什么? [“a”、“b”、“c1”、“c2”、“d”、“e1”、“e2”]?
  • 这很可能是重复的*.com/questions/526556/…
  • 我无法理解反对票。这个问题是一个关于解析字符串以在内存中生成嵌套数组的有趣问题。我是 SO 的新手,但我猜人们只是不明白这个问题。
  • “给我代码”问题经常被否决,我们希望人们首先表现出一些努力来解决他们自己的问题
  • 我的问题应该被否决!我其实是这样的,但是真正的json是无效的格式,然后json_decode什么也没返回=>所以我不认为这是一个有效的json字符串。

标签: php arrays json


【解决方案1】:

提供的字符串是有效的 JSON - 因此json_decode 可用于将其转换为真正的 (PHP) 数组。

几乎直接取自文档(仅更改了字符串):

$json = '[["a","b",["c1","c2"]],"d",["e1","e2"]]';
var_dump(json_decode($json));

在这种情况下,它比尝试使用其他代码评估器(即eval)破解它要干净和安全得多,并且比编写自定义解析代码更简单。

【讨论】:

  • 为什么eval 在您的答案中? eval 永远不是正确答案。
  • @FritsvanCampen 我认为 eval 值得一提,因为它已被用于类似的任务(这个问题最初没有标记为 json)。我已经更新了措辞,试图让它更……明显。另外,请注意没有指向eval 的链接。
【解决方案2】:

How to "flatten" a multi-dimensional array to simple one in PHP?How to Flatten a Multidimensional Array? 可能重复

对我来说最简单/最好的解决方案是

function flatten(array $array) {
    $return = array();
    array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
    return $return;
}

【讨论】:

  • 我认为 [json] 标签意味着它是一个需要解析为 JSON 的字符串——但很难说。
  • 你可能是对的。我会把它留在这里以防万一。 (虽然不太可能)