php:解析和转换数组结构

时间:2011-04-13 11:53:40

标签: php arrays

我需要将一个数组结构转换为另一个数组结构。

我希望有人会发现值得花时间来展示如何以简单的方式完成这项工作。它比我的阵列操作技能略高一点。

我们开始的结构如下:

$cssoptions = array(

    array(
        'group'     => 'Measurements'
    ,   'selector'  => '#content'
    ,   'rule'      => 'width'
    ,   'value'     => '200px'
    ) // end data set

,   array(
        'group'     => 'Measurements'
    ,   'selector'  => '#content'
    ,   'rule'      => 'margin-right'
    ,   'value'     => '20px'
    ) // end data set

,   array(
        'group'     => 'Colors'
    ,   'selector'  => '#content'
    ,   'rule'      => 'color'
    ,   'value'     => '#444'
    ) // end data set

,   array(
        'group'     => 'Measurements'
    ,   'selector'  => '.sidebar'
    ,   'rule'      => 'margin-top'
    ,   'value'     => '10px'
    ) // end data set

); // END $cssoptions

它是一组谨慎的数据集,每个数据集都包含一个包含两个键的数组=>值对描述'css-rule'和'css-rule-value'。

此外,每个数据集都包含一个键=>描述“css-selector-group”的值对,“css-rule”应该是blong,而key =>值对描述一个'规则组',用于将最终css的渲染结构化为一个整齐的css代码块,由他们描述的属性(颜色,测量,排版等等)排列。

现在,我需要解析它,并将其转换为新结构,其中:

    'rule'  => 'rule-name'
,   'value' => 'value-string'

将每个数据集转换为:

'rule-name' => 'value-string'

..然后放入一个新的数组结构,其中所有'rule-name'=> 'value-string'对应该在相应的'selector-values'下汇总。像这样:

'#content' => array(

    'width' => '200px'
,   'margin-right' => '20px'            

) // end selecor block

..最后所有这些块应该在它们各自的'样式组'下分组,创建一个最终得到的数组结构,如下所示:

$css => array(

    'Measurements' => array(

        '#content' => array(

            'width' => '200px'
        ,   'margin-right' => '20px'            

        ) // end selecor block


    ,   '.sidebar' => array(

            'margin-top' => '10px'

        ) // end selector block

    ) // end rule group


,   'Colors' => array(

        '#content' => array(

            'color' => '#444'

        ) // end selector block

    ) // end rule group

); // end css

1 个答案:

答案 0 :(得分:2)

这不是干净且经过测试的代码,但是这样的事情应该可以完成这项工作:

$css = array();    
foreach($cssoptions as $cssoption)
{
    $css[$cssoption['group']][$cssoption['selector']][$cssoption['rule']] = $cssoption['value'];
}

注意:如果您指定同一组+选择器+规则组合的更多值,则只保留最后一个。