开发者

A better way to explode twice in PHP

开发者 https://www.devze.com 2023-04-03 10:48 出处:网络
Given: $val = \"font-size:12px;color:#ff0000;font-family:Arial\"; The following code will explode the string twice, to produce an array of arrays:

Given:

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

The following code will explode the string twice, to produce an array of arrays:

$val = explode(';',$val);
f开发者_如何学Gooreach($val as &$v)
    $v = explode(':',$v);

var_dump($val);

The output is:

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"
  }
}

Is there a more efficient / cleaner way to achieve the same result?

I'd prefer something with no lambda functions since PHP 5.2 doesn't support them. But this is a purely intellectual question anyway, so, that's just a preference.


You can try with:

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

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

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

Output:

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


I'd recommend against references--you can run into some odd errors. But your approach is fine. Alternatively, you could do something with array_map:

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

精彩评论

暂无评论...
验证码 换一张
取 消