微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用PHP foreach构建样式表

好的 – 所以我正在创建一个动态的CSS样式表,我想用数组设置它.

首先让我说我不是PHP专家,但我有点了解我的方法.

这是我非常基本的数组.

$visual_css = array (
    array(
        "selector"  => "body",
        "property"  => "background",
        "value"     => "#FFF",
        "property2" => "color",
        "value2"    => "#000",
        "type"      => "css"
    )
);

所以我们有一个选择器,以及两个带值的属性.

我现在想要创建样式表,但由于缺乏PHP知识,我遇到了问题.

foreach ($visual_css as $value) {
    switch ($value['type']) {
        case "css":

            // Open selector
            echo ( !empty($value['selector']) ? $value['selector'] . '{' : null );

            foreach ($value as $key => $item) {
                foreach ($value as $key2 => $item2) {
                    //Match only the id's against the key
                    if (preg_match('/^property/i', $key) && preg_match('/^value/i', $key2)) {
                        // First property
                        echo ( !empty($item) ? $item . ':' : null );
                            echo ( !empty($item2) ? $item2 . ';' : null );
                    }
                }

            }

            // Close selector
            echo ( !empty($value['selector']) ? '}' : null );

        break;
    }
}

现在我知道这段代码不正确,因为它在样式表中输出以下内容

body{background:#FFF;background:#000;color:#FFF;color:#000;}

这是期望的结果:

body{background:#FFF;color:#000;}

所以基本上,我希望能够创建无限数量属性和值,并在它们之后加上一个递增的数字,并让代码写出来.

谁能帮我?

谢谢!

解决方法:

因此,我的方法使用多维数组而不是平面数组来嵌套子数组中选择器的属性.这样,通过首先遍历第一层,然后遍历每个父节点的子节点并为每个属性/值对组成CSS,您的方法更简洁.它还使迭代变得简单,而不是必须检查键的值以找到您所在的对.如果您需要不同的输出格式,您的迭代代码可以决定,并且它应该被排除在结构之外

$visual_css = array (
    'body'  => array(
        'background'    => '#FFF',
        'color'         => '#000'
    )
);

$output = '';
foreach($visual_css as $k => $properties) {
    if(!count($properties))
        continue;

    $temporary_output = $k . ' {';

    $elements_added = 0;

    foreach($properties as $p => $v) {
        if(empty($v))
            continue;

        $elements_added++;

        $temporary_output .= $p . ': ' . $v . '; ';
    }

    $temporary_output .= "}\n";

    if($elements_added > 0)
        $output .= $temporary_output;
}

echo $output;
// body {background: #FFF; color: #000; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐