在PHP中进行两次爆炸的更好方法
鉴于: 以下代码将对字符串进行两次分解,以生成数组数组:在PHP中进行两次爆炸的更好方法,php,arrays,string,performance,explode,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); 是否有更有效/更清洁的方法来实现相同的结果 我更喜欢没有lambda函数的东西,因为PHP5.2不支持它们。但这是一个纯粹的智
$val = "font-size:12px;color:#ff0000;font-family:Arial";
输出为:
$val = explode(';',$val);
foreach($val as &$v)
$v = explode(':',$v);
var_dump($val);
是否有更有效/更清洁的方法来实现相同的结果
我更喜欢没有lambda函数的东西,因为PHP5.2不支持它们。但这是一个纯粹的智力问题,因此,这只是一个偏好。您可以尝试:
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"
}
}
输出:
$input = "font-size:12px;color:#ff0000;font-family:Arial";
preg_match_all('/([^:]*?):([^;]*);?/', $input, $matches);
$output = array_combine($matches[1], $matches[2]);
我建议不要使用引用--您可能会遇到一些奇怪的错误。但你的方法很好。或者,您可以使用array_map执行以下操作:
array(3) {
["font-size"]=>
string(4) "12px"
["color"]=>
string(7) "#ff0000"
["font-family"]=>
string(5) "Arial"
}
这似乎很可能会成为一个答案。@Jared:我也在想同样的事情。但是我更喜欢没有lambda函数。你不应该在你的问题中包括这个吗?你目前的方法会让人觉得效率低下/不干净吗?@Jared:是的,我应该:-)我已经编辑了我的问题。我没有得到相同的输出。我得到了
array(3){[“font size”]=>string(0)”[“12px;color”]=>string(0)”[“#ff0000;font-family”]=>string(0)”}
我对引用非常满意,所以我不关心它。我的方法很好,我只是想要一些更酷的东西。:-)你的很好,尽管它需要PHP5.3“我对引用很满意”——这并不能让它们很好地使用:)不,就像任何东西一样,它们是一个工具。我的工具箱中有引用并不意味着它们适用于所有应用程序。但是在我使用它们的方式中,引用不会产生任何奇怪的错误,所以我认为没有理由在这种情况下避免它们,因为我非常理解它们,并且知道我为什么在这里使用它们。
$val = array_map(function($v) { return explode(':', $v); }, explode(';', $val)));