PHP中爆炸两次的更好方法

发布于 2024-12-03 19:36:22 字数 712 浏览 0 评论 0原文

给定:

$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 不支持它们。但这无论如何都是一个纯粹的智力问题,所以,这只是一个偏好。

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);
foreach($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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你丑哭了我 2024-12-10 19:36:22

您可以尝试使用:

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

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"
}
怪我鬧 2024-12-10 19:36:22

我建议不要引用——你可能会遇到一些奇怪的错误。但你的方法没问题。或者,您可以使用 array_map 做一些事情:

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

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)));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文