如何解决php字符串为数组结构
在php中,我需要打开这个数组:array(
\'group1_selector1_rule1\' => value,\'group1_selector1_rule2\' => value,\'group1_selector1_rule3\' => value,\'group1_selector2_rule1\' => value,\'group1_selector2_rule2\' => value,\'group2_selector1_rule1\' => value,\'group2_selector1_rule2\' => value,\'group3_selector1_rule1\' => value,\'group3_selector2_rule1\' => value,\'group3_selector2_rule2\' => value
);
到这个:
array(
\'group1\' => array(
\'selector1\' => array(
\'rule1\' => value,\'rule2\' => value,\'rule3\' => value
),\'selector2\' => array(
\'rule1\' => value,\'rule2\' => value
)
) // end group 1,\'group2\' => array(
\'selector1\' => array(
\'rule1\' => value,\'rule2\' => value
)
) // end group 2,\'group3\' => array(
\'selector1\' => array(
\'rule1\' => value
),\'rule2\' => value
)
) // end group 3
); // end array
如果有人想提出一个聪明的方法,我会很感兴趣:)
我想我可以使用一些算法,但是我想要一些优雅的东西,并且感觉到某些对explode()的巧妙使用和某些'array_merging \'函数可以做到吗?
解决方法
$res_array = array();
foreach ($array as $key=>$value) {
$x = explode(\"_\",$key);
$res_array[$x[0]][$x[1]][$x[2]] = $value;
}
var_dump($res_array);
为$ array
$array = array(
\'group1_selector1_rule1\' => \'value1\',\'group1_selector1_rule2\' => \'value2\',\'group1_selector1_rule3\' => \'value3\',\'group1_selector2_rule1\' => \'value4\',\'group1_selector2_rule2\' => \'value5\',\'group2_selector1_rule1\' => \'value6\',\'group2_selector1_rule2\' => \'value7\',\'group3_selector1_rule1\' => \'value8\',\'group3_selector2_rule1\' => \'value9\',\'group3_selector2_rule2\' => \'value10\'
);
输出:
array(3) {
[\"group1\"]=>
array(2) {
[\"selector1\"]=>
array(3) {
[\"rule1\"]=>
string(6) \"value1\"
[\"rule2\"]=>
string(6) \"value2\"
[\"rule3\"]=>
string(6) \"value3\"
}
[\"selector2\"]=>
array(2) {
[\"rule1\"]=>
string(6) \"value4\"
[\"rule2\"]=>
string(6) \"value5\"
}
}
[\"group2\"]=>
array(1) {
[\"selector1\"]=>
array(2) {
[\"rule1\"]=>
string(6) \"value6\"
[\"rule2\"]=>
string(6) \"value7\"
}
}
[\"group3\"]=>
array(2) {
[\"selector1\"]=>
array(1) {
[\"rule1\"]=>
string(6) \"value8\"
}
[\"selector2\"]=>
array(2) {
[\"rule1\"]=>
string(6) \"value9\"
[\"rule2\"]=>
string(7) \"value10\"
}
}
}
,<?
$poo=array(
\'group1_selector1_rule1\' => \'value\',\'group1_selector1_rule2\' => \'value\',\'group1_selector1_rule3\' => \'value\',\'group1_selector2_rule1\' => \'value\',\'group1_selector2_rule2\' => \'value\',\'group2_selector1_rule1\' => \'value\',\'group2_selector1_rule2\' => \'value\',\'group3_selector1_rule1\' => \'value\',\'group3_selector2_rule1\' => \'value\',\'group3_selector2_rule2\' => \'value\'
);
foreach ($poo as $k=>$v){
list($a,$b,$c) = explode(\'_\',$k);
$new[$a][$b][$c]=$v;
}
print_r($new);
http://www.ideone.com/skv0a
,通用解决方案怎么样?
<?php
function transform($oldArray)
{
$newArray = array();
foreach ($oldArray as $selector => $value)
{
$parts = explode(\'_\',$selector);
$last = array_pop($parts);
$arr = &$newArray;
foreach ($parts as $part)
{
if (!is_array($arr[$part])) $arr[$part] = array();
$arr = &$arr[$part];
}
$arr[$last] = $value;
}
return $newArray;
}
?>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。