将RGB字符串解析为数组

Chr*_*ris 0 php

有没有内置的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)

Dan*_* W. 7

你可以使用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匹配浮点数.

参考文献:

http://php.net/list

http://php.net/sscanf

不要指望人们为您提供完全可用的超级功能代码.这里的答案明确表示你犯了错误,应该给你一个帮助解决更复杂问题的想法.

所以你在这里的部分将是这样的:

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)

演示.

  • 对不起,我确实希望您的传输知识能够用您自己的想象来处理丢失的代码. (3认同)