将此字符串转换为此数组的最快方法是什么?
$string = 'a="b" c="d" e="f"';
Array (
a => b
c => d
e => f
)
答案 0 :(得分:8)
假设它们总是以空格分隔并且值始终用引号括起来,您可以explode()
两次并删除引号。可能有更快的方法,但这种方法非常简单。
$string = 'a="b" c="d" e="f"';
// Output array
$ouput = array();
// Split the string on spaces...
$temp = explode(" ", $string);
// Iterate over each key="val" group
foreach ($temp as $t) {
// Split it on the =
$pair = explode("=", $t);
// Append to the output array using the first component as key
// and the second component (without quotes) as the value
$output[$pair[0]] = str_replace('"', '', $pair[1]);
}
print_r($output);
array(3) {
["a"]=>
string(1) "b"
["c"]=>
string(1) "d"
["e"]=>
string(1) "f"
}
答案 1 :(得分:2)
json_decode接近您要求的内容。
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
答案 2 :(得分:1)
<?php
$string = 'a="b" c="d" e="f"';
$string = str_replace('"','',$string);
$str1 = explode(' ',$string);
foreach($str1 as $val)
{
$val2 = explode('=',$val);
$arr[$val2[0]] = $val2[1];
}
print_r($arr);
?>
答案 3 :(得分:1)
我会推荐一个正则表达式,而不是一个脆弱的爆炸。这证实了结构,而不是希望最好。它也短得多:
preg_match_all('/(\w+)="([^"]*)"/', $input, $match);
$map = array_combine($match[1], $match[2]);
答案 4 :(得分:0)
看起来它是你所指的php脚本。但请按照建议添加php标签。
我不确定是否有一种直接的方法可以按照您想要的方式拆分它,因为您希望索引不是默认索引。
解决这个问题的一种算法如下......
我不确定这是最快的。
答案 5 :(得分:0)
我对其速度或可靠性不做任何承诺,因为运行准确的基准测试需要您的真实数据(质量和体积)。
无论如何,为了向读者展示另一种方法,我将使用parse_str()
代码:(Demo)
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (true) {
do {
System.out.println("Please enter a non-negative number: ");
double x = in.nextDouble();
} while (x < 0);
System.out.println("Square root is " + sqrt(x));
System.out.println("Do you want to continue? (Enter Y or N): ");
String f = in.nextLine();
if (!f.equalsIgnoreCase("Y")) {
break;
}
}
}
这会删除双引号并用&符替换所有空格。
该方法与此页面上的其他方法一样,会在值包含空格或双引号时破坏数据。
输出:
$string = 'a="b" c="d" e="f"';
parse_str(str_replace(['"',' '],['','&'],$string),$out);
var_export($out);
为了记录,马里奥的答案将是页面上最可靠的答案。