使用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; }

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...