将格式化字符串转换为数组的最快方法?

时间:2011-12-07 14:42:36

标签: php arrays

将此字符串转换为此数组的最快方法是什么?

$string = 'a="b" c="d" e="f"';

Array (
a => b
c => d
e => f
)

6 个答案:

答案 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标签。

我不确定是否有一种直接的方法可以按照您想要的方式拆分它,因为您希望索引不是默认索引。

解决这个问题的一种算法如下......

  1. 用空格分隔符
  2. 拆分它
  3. 从每个生成的字符串中删除分号
  4. 使用'='
  5. 拆分每个生成的字符串
  6. 将元素添加到新数组中,其中string = = key,after = as value
  7. 我不确定这是最快的。

答案 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);

为了记录,马里奥的答案将是页面上最可靠的答案。