拆分每个数组元素并转换为多维数组?

时间:2013-01-28 10:58:42

标签: php arrays multidimensional-array

在提交表单后我有一个数组POST:

$POST = Array
(
    [29#487_Mon] => 90,
    [29#487_Mon_power] => 50,
    [30#487_Thur]=>80,
    [30#487_Thur_power]=>90,
    [41#487_Wed]=>10,
    [41#487_Wed_power]=>20,

)

我希望将$ POST数组转换为更友好的格式,如下所示:

$Transform = array(
    [29]=>array(
            [487_Mon] => 90,
            [487_Mon_power] => 50
            ),
    [30]=>array(
            [487_Thur]=>80,
            [487_Thur_power]=>90
            ),
    [41]=>array(
            [487_Wed]=>10,
            [487_Wed_power]=>20
            )
    )

任何人都知道如何做到这一点?

2 个答案:

答案 0 :(得分:4)

正如@Gordon在评论中指出的那样,你可以通过以下方式来实现:

<?php
$Transform = array();
foreach($POST as $key => $val){
 $key_parts = explode("#", $key); //spliting 29#487_Mon to 29 and 487_Mon
 /*
 $key_parts[0] = 29
 $key_parts[1] = 487_Mon
 */
 $Transform[$key_parts[0]][$key_parts[1]] = $val;
}
echo  '<pre>';
print_r($Transform);
echo  '</pre>';
?>

请参阅Demo

答案 1 :(得分:2)

这正在扩大@Gordon所说的内容。如果@Gordon希望提交他的评论作为答案,我会撤回我的答案。

经过测试和工作

<?
    if( $_POST['submit'] ) {
        echo "<pre>";
        print_r( $_POST );
        echo "</pre>";
    }
?>

<form action="" method="post">
    <input type="text" name="29[487_Mon]"/>
    <input type="text" name="29[487_Mon_power]"/>
    <br/><br/>
    <input type="text" name="30[487_Thur]"/>
    <input type="text" name="30[487_Thur_power]"/>
    <br/><br/>
    <input type="text" name="41[487_Wed]"/>
    <input type="text" name="41[487_Wed_power]"/>
    <br/><br/>

    <input type="submit" name="submit" />
</form>