将自定义键值字符串解析为实际数组

Posted

技术标签:

【中文标题】将自定义键值字符串解析为实际数组【英文标题】:Parse custom key to value string into actual array 【发布时间】:2013-08-13 03:59:59 【问题描述】:

我想问是否有某种方法可以操纵已经构建的 php 函数将格式为 key => value 的字符串分别转换为具有键和值的实际字符串?我知道有 parse_str 但我相信这是 key=value 语法

这个问题似乎不清楚,所以这里有一个例子:

我有一个像color => blue\nshape => sphere\nsize => medium 这样的字符串,我想把它变成一个数组

【问题讨论】:

我什么都没试过。我在问我是否可以使用包含的功能,或者我必须构建自己的 extract()?但我不太清楚你想要什么 你能举一个输入和期望输出的例子吗? @redreggae 我有一个像color => blue\nshape => sphere\nsize => medium 这样的字符串,我想把它变成一个数组 【参考方案1】:
$string = 'color => blue\nshape => sphere\nsize => medium';
$foo = array();

// Explode your string
$stringParts = explode("\n", $string);

foreach ($stringParts as $item) 

    // For each "item" in your string
    // Separate key from value
    $item = explode(' => ', $item);

    // Assign it as a key-value combination in your new array $foo
    $foo[$item[0]] = $item[1];


print_r($foo);

【讨论】:

【参考方案2】:

您可以替换字符并使用 parse_str:

$string = 'color => blue\nshape => sphere\nsize => medium';
$string = str_replace(array(' => ', "\\n"), array('=', '&'), $string);
parse_str($string, $output);

print_r($output);

编辑:

或者使用strtok和explode的组合:

$string = 'color => blue\nshape => sphere\nsize => medium';
$output = array();
$tok = strtok($string, "\\n");
while ($tok !== false) 
    $array = explode(' => ', $tok);
    $output[$array[0]] = $array[1];
    $tok = strtok("\\n");


print_r($output);

我意识到 strtok 只有在分隔符由 1 个字符组成时才有用。所以最好只使用爆炸版本。

【讨论】:

这是个好主意,但不幸的是,有些 valeus 可能包含&,我真的不能这样做。或者,也许我可以先用一些不太可能发生的独特组合替换&s,然后尝试这个并反转&s。如果没有更好的建议,我会同意的! 否则使用我的新版本或 yones safari 的答案。【参考方案3】:

试试这个代码:

$str='color => blue\nshape => sphere\nsize => medium;';
$first_arr=explode('\\', $str);
$array=array();
foreach ($first_arr as $value) 
    $var=explode('=>', $value);
    $array[$var[0]]=$var[1];

var_dump($array);

【讨论】:

【参考方案4】:
parse_str(str_replace("\n", "&", $str), $output);   

【讨论】:

虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。

以上是关于将自定义键值字符串解析为实际数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义 ObjectId 添加到解析服务器对象?

将自定义数组保存到 Core Data

如何使用处理 Java 库将自定义形状数组和字符串数组合并到 JSON 对象中

Swift 4 如何将自定义对象数组转换为 JSON

无法将自定义结果从解析器传递到 Graphql

使用 pymongo 将自定义 python 对象编码为 BSON