操作复杂的输入数组

时间:2014-04-02 22:30:15

标签: php arrays

我有一个动态表单,除了数组之外我不知道输入的名称,我需要将它们相互关联。

例如,我的表单如下所示:

<input type="hidden" name="43897346[TitleID]" value="1" />

<input type="hidden" name="11122223[FieldID]" value="36" />
<input type="hidden" name="11122223[FieldPermission]" value="read" />

<input type="hidden" name="44455566[FieldID]" value="37" />
<input type="hidden" name="44455566[FieldPermission]" value="write" />

<input type="hidden" name="77676667[TitleID]" value="2" />

<input type="hidden" name="88899000[FieldID]" value="38" />
<input type="hidden" name="88899000[FieldPermission]" value="write" />

我想要做的是将每个输入与FieldID and FieldPermission的数组关联到他上方的TitleID,所以我的最终结果应如下所示:

Array
(
    [1] => Array
        (
            [FieldID] => Array
                (
                    [0] => 36
                    [1] => 37
                )

            [FieldPermission] => Array
                (
                    [0] => read
                    [1] => write
                )

        )
    [2] => Array
        (
            [FieldID] => Array
                (
                    [0] => 38
                )

            [FieldPermission] => Array
                (
                    [0] => write
                )

        )
)

注意:我不知道我的输入名称,我只知道数组名称。 我试着这样做:

$toInsert = array();
foreach($_POST as $k => $v){
        $titleID = '';
        if(array_key_exists('TitleID',$v))
            $titleID = $v['TitleID'];
        if(array_key_exists('FieldID',$v))
            $toInsert[ $titleID ]['FieldID'][] = $v['FieldID'];
        if(array_key_exists('FieldPermission',$v))
            $toInsert[ $titleID ]['FieldPermission'][] = $v['FieldPermission'];
}

但没有成功......任何想法? 在此先感谢!!!

1 个答案:

答案 0 :(得分:1)

您刚刚犯了一个小错误:每次循环时,您都会将$titleID重置为空字符串。你希望值保持在那里直到你下次遇到'titleID'值,所以只需取出那条线(或者在循环之前做一次,设置一个初始值&#34;以防万一&#34; ):

$toInsert = array();
$titleID = '';
foreach($_POST as $k => $v){
        if(array_key_exists('TitleID',$v))
            $titleID = $v['TitleID'];
        if(array_key_exists('FieldID',$v))
            $toInsert[ $titleID ]['FieldID'][] = $v['FieldID'];
        if(array_key_exists('FieldPermission',$v))
            $toInsert[ $titleID ]['FieldPermission'][] = $v['FieldPermission'];
}

在这里a live demo向您展示它的有效性。