在PHP中爆炸两次的更好方法

时间:2011-09-08 22:32:47

标签: php arrays string performance explode

假设:

$val = "font-size:12px;color:#ff0000;font-family:Arial";

以下代码将对字符串进行两次爆炸,以生成数组数组:

$val = explode(';',$val);
foreach($val as &$v)
    $v = explode(':',$v);

var_dump($val);

输出结果为:

array(3) {
  [0]=>
  array(2) {
    [0]=>
    string(9) "font-size"
    [1]=>
    string(4) "12px"
  }
  [1]=>
  array(2) {
    [0]=>
    string(4) "fill"
    [1]=>
    string(7) "#ff0000"
  }
  [2]=>
  &array(2) {
    [0]=>
    string(11) "font-family"
    [1]=>
    string(5) "Arial"
  }
}

是否有更有效/更清洁的方法来实现相同的结果?

我更喜欢没有lambda函数的东西,因为PHP 5.2不支持它们。但无论如何,这只是一个纯粹的智力问题,所以,这只是一种偏好。

2 个答案:

答案 0 :(得分:2)

您可以尝试:

$input  = "font-size:12px;color:#ff0000;font-family:Arial";

preg_match_all('/([^:]*?):([^;]*);?/', $input, $matches);

$output = array_combine($matches[1], $matches[2]);

输出:

array(3) {
  ["font-size"]=>
  string(4) "12px"
  ["color"]=>
  string(7) "#ff0000"
  ["font-family"]=>
  string(5) "Arial"
}

答案 1 :(得分:2)

我建议不要引用 - 你可能遇到一些奇怪的错误。但你的方法很好。或者,您可以使用array_map执行某些操作:

$val = array_map(function($v) { return explode(':', $v); }, explode(';', $val)));