2011-04-13 113 views
0

我需要将一个数组结构转换为另一个数组结构。php:解析和转换数组结构

我希望有人会觉得值得花时间来展示如何以简单的方式完成这项工作。这比我的数组操作技巧稍高一点。

我们在开始时看起来像这样的结构:

$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规则”和两个关键=>值对的数组的“CSS规则价值”。此外,每个数据集都包含描述'css-rule'应该与之相关的'css-selector-group'的关键字=>值对,以及描述'规则组'的key =>值对应该用于构建最终的CSS呈现为一个整洁的CSS代码块,它们按照它们描述的属性(颜色,尺寸,排版等)排列。

现在,我需要解析它,到一个新的结构,其中:

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

每个数据集被转换成:

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

..和然后放入一个新的阵列结构,其中所有“的规则名” =>“值字符串”对应根据各自的“选择值”被聚集像这样:

'#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 

回答

2

这是不干净和测试代码,但这样的事情应该做的工作:

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

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

+0

优雅,我需要习惯不复杂的事情。我不需要指定更多的相同的组+选择器+规则组合的值,所以这将做到这一点。非常感谢。 – mikkelbreum 2011-04-13 12:29:31

+0

你是什么意思,它不干净和测试,它看起来超级干净,我怎么能更简洁? ..它的作品:)这对我来说够好。 – mikkelbreum 2011-04-13 12:46:24

+0

我没有测试,因此未经测试(可能包含一些语法错误)。我认为几乎所有你用PHP写的东西都有点肮脏;) – Binus 2011-04-13 13:06:19