有没有内置的PHP函数来获得以下结果?
$rgba = "rgba(246, 24, 35, 0.8)";
$splittedRgba = splitRGB($rgba);
$rgb = "rgb(246, 24, 35)";
$splittedRgb = splitRGB($rgb); // splitRGB is the function I need
/*
$splittedRgba['r'] = 246;
$splittedRgba['g'] = 24;
$splittedRgba['b'] = 35;
$splittedRgba['a'] = 0.8;
$splittedRgb['r'] = 246;
$splittedRgb['g'] = 24;
$splittedRgb['b'] = 35;
$splittedRgb['a'] = 1;
*/
Run Code Online (Sandbox Code Playgroud)
你可以使用preg_match,但你也可以使用更简单的sscanf函数:
$rgba = sscanf("rgba(246, 24, 35, 0.8)", "rgba(%d, %d, %d, %f)");
print_r($rgba);
$rgb = sscanf("rgb(246, 24, 35)", "rgb(%d, %d, %d)");
print_r($rgba);
Run Code Online (Sandbox Code Playgroud)
%d匹配十进制数,%f匹配浮点数.
参考文献:
不要指望人们为您提供完全可用的超级功能代码.这里的答案明确表示你犯了错误,应该给你一个帮助解决更复杂问题的想法.
所以你在这里的部分将是这样的:
function parseRGBa($rgba) {
$rgba = trim(str_replace(' ', '', $rgba));
if (stripos($rgba, 'rgba') !== false) {
$res = sscanf($rgba, "rgba(%d, %d, %d, %f)");
}
else {
$res = sscanf($rgba, "rgb(%d, %d, %d)");
$res[] = 1;
}
return array_combine(array('r', 'g', 'b', 'a'), $res);
}
print_r(parseRGBa('rgba(1, 2, 3, 0.5)'));
Run Code Online (Sandbox Code Playgroud)
演示.