PHP-根据输入类型(键)拆分数组

时间:2018-10-22 15:01:41

标签: php arrays forms

我有一个以关联数组发送大量混合数据(无线电输入,文本字段和复选框)的表单。为了存储数据,我想根据输入类型将数据拆分为较小的数组。 var_dump如下所示。

ATM i get this when i var_dump the array.

那么我如何制作包含r **键,textbox **键和checkbox **键的新数组?

$arr = array( "r11"=> "2",
    "tekstbox11"=> "A",
    "udskift11"=> "on",
    "r12"=> "2",
    "tekstbox12"=> "B",
    "udskift12"=> "on",
    "r13"=> "2",
    "tekstbox13"=> "C",
    "udskift13"=> "on",
    "r14"=> "0",
    "tekstbox14"=> "",
    "r15"=> "1",
    "tekstbox15"=> "",
    "r16"=> "0",
    "tekstbox16"=> "",
    "r17"=> "1",
    "tekstbox17"=> "",
    "r18"=> "0",
    "tekstbox18"=> "",
    "r19"=> "1",
    "tekstbox19"=> "",
    "r110"=> "0",
    "tekstbox110"=> "",
    "r111"=> "1",
    "textbox111"=> "",
    "r112"=> "0",
    "textbox112"=> "",
    "r113"=> "1",
    "textbox113"=> "",
    "r114"=> "0",
    "textbox114"=> "",
    "r115"=> "1",
    "textbox115"=> "",
    "r116"=> "0",
    "textbox116"=> "",
    "r117"=> "1",
    "textbox117"=> "",
    "r118"=> "0",
    "textbox118"=> "",
    "r119"=> "1",
    "textbox119"=> "",
    "r120"=> "0",
    "textbox120"=> "",
    "r21"=> "2",
    "tekstbox21"=> "a",
    "r22"=> "2",
    "tekstbox22"=> "b",
    "r23"=> "2",
    "tekstbox23"=> "c",
    "r24"=> "0",
    "tekstbox24"=> "",
    "r25"=> "1",
    "textbox25"=> "",
    "r26"=> "0",
    "textbox26"=> "",
    "r27"=> "1",
    "textbox27"=> "",
    "r28"=> "0",
    "textbox28"=> "",
    "r31"=> "2",
    "tekstbox31"=> "1m",
    "udskift31"=> "on",
    "r32"=> "2",
    "tekstbox32"=> "2m",
    "udskift32"=> "on",
    "r33"=> "2",
    "tekstbox33"=> "3m",
    "udskift33"=> "on",
    "r34"=> "2",
    "tekstbox34"=> "4m",
    "udskift34"=> "on",
    "r35"=> "0",
    "tekstbox35"=> "",
    "r36"=> "0",
    "tekstbox36"=> "",
    "r37"=> "0",
    "tekstbox37"=> "",
    "r38"=> "0",
    "tekstbox38"=> "",
    "r39"=> "0",
    "tekstbox39"=> "",
    "r310"=> "0",
    "tekstbox310"=> "",
    "r311"=> "0",
    "tekstbox311"=> "",
    "r312"=> "0",
    "tekstbox312"=> "",
    "r313"=> "0",
    "tekstbox313"=> "",
    "r314"=> "1",
    "textbox314"=> "",
    "r315"=> "1",
    "textbox315"=> "",
    "r316"=> "1",
    "textbox316"=> "",
    "r317"=> "1",
    "textbox317"=> "",
    "r318"=> "1",
    "textbox318"=> "",
    "r319"=> "1",
    "textbox319"=> "",
    "r320"=> "1",
    "textbox320"=> "",
    "r321"=> "1",
    "textbox321"=> "",
    "r322"=> "1",
    "textbox322"=> "",
    "r323"=> "1",
    "textbox323"=> "",
    "r324"=> "1",
    "textbox324"=> "",
    "r325"=> "1",
    "textbox325"=> "",
    "r326"=> "2",
    "textbox326"=> "SLUT MED",
    "udskift326"=> "on"
);

2 个答案:

答案 0 :(得分:0)

您可以使用array_filter()之类的东西来检查密钥。

<?php 
$inputArray = [
    'text1' => 'text1',
    'text2' => 'text2',
    'checkbox1' => 'checkbox1',
    'checkbox2' => 'checkbox2',
    'radio1' => 'radio1',
    'radio2' => 'radio2'
];

$radioArray = array_filter($inputArray, function($key) {
    return false !== strpos($key, 'radio');
});
$textArray = array_filter($inputArray, function($key) {
    return false !== strpos($key, 'text');
});
$checkboxArray = array_filter($inputArray, function($key) {
    return false !== strpos($key, 'checkbox');
});

答案 1 :(得分:0)

您可以迭代数组并将键分为字母和数字部分,然后将这些部分用作结果数组中的键。

class GameForm(forms.Form):
    class Meta:
        model = Game

结果将类似于

def view(request):
    game = Game.objects.get(id=1)
    form = GameForm(instance=game)
    return render(request, 'template.html', {'form': form})

但是您知道,如果仅重命名表单输入,例如:

foreach ($array as $key => $value) {
    preg_match('/(\D+)(\d+)/', $key, $parts);
    $result[$parts[1]][$parts[2]] = $value;
    //    alpha^    numeric^
}