PHP - разбиение массива на основе типа ввода (ключ) - PullRequest
0 голосов
/ 22 октября 2018

У меня есть форма, которая отправляет большое количество смешанных данных (радиовход, текстовые поля и флажки) в ассоциативный массив.Чтобы сохранить данные, я хотел бы разбить данные на меньшие массивы, основываясь на типах ввода.Var_dump показан ниже.

ATM Я получаю это, когда я var_dump массив.

Так, как мне сделать новые массивы, содержащие ключи r **, ключи текстового поля ** ифлажок ** ключи?

$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 голосов
/ 22 октября 2018

Вы можете перебрать массив и разделить ключи на буквенные и числовые части, а затем использовать эти части в качестве ключей в массиве результатов.

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

Результат будет выглядеть как

$result = [
    'r' => ['11' => 2, '12'=> 2, ...],
    'tekstbox' => ['11' => 'A', '12'=> 'B', ...],
    'udskift' => ['11' => 'on' => '12' => 'on' ...]
];

Но вы знаете, вы также можете достичь того же результата, просто переименовав входные данные в форму:

 <input type="text" name="r[11]">
0 голосов
/ 22 октября 2018

Вы можете использовать что-то вроде 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');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...