Изменить ключи и значения в массиве, созданном из сериализованной формы - PullRequest
0 голосов
/ 20 января 2019

У меня есть форма, которая сериализуется, а затем отправляется в сценарий PHP с использованием ajax.

Когда я публикую форму, мой массив выглядит так:

Array
(
    [0] => Array
        (
            [name] => informatie[titel]
            [value] => 
        )

    [1] => Array
        (
            [name] => informatie[inspectienummer]
            [value] => 
        )

    [2] => Array
        (
            [name] => informatie[datum]
            [value] => 
        )

    [3] => Array
        (
            [name] => informatie[naaminspecteur]
            [value] => 
        )

    [4] => Array
        (
            [name] => informatie[locatie]
            [value] => 
        )

    [5] => Array
        (
            [name] => informatie[naamgeauditeerden]
            [value] => 
        )

    [6] => Array
        (
            [name] => questionlist[jjjj][hhhh]
            [value] => ok
        )

    [7] => Array
        (
            [name] => questionlist[jjjj][jjj]
            [value] => ok
        )

    [8] => Array
        (
            [name] => questionlist[Testt][test]
            [value] => fout
        )

)

Массив автоматически содержит ключи name и value. Но мне нужен такой массив:

Array
(
    [information] => Array
        (
            [titel] => inserted value
            [inspectienummer] => inserted value
            [datum] => inserted value
            [naaminspecteur] => inserted value
            [locatie] => inserted value
            [naamgeauditeerden] => inserted value
        )

    [questionlist] => Array
        (
            [jjjj] => Array
                    (
                        [hhhh] => ok
                        [jjj] => fout
                    )
            [testt] => Array
                    (
                        [test] => n.v.t.
                    )
        )
)

Как мне этого добиться? Вот что я пытался сделать:

<code>$wpi = $_POST['wpi'];


$newarray = array();
foreach($wpi as $wpikey => $wpivalue){
  $newarray[$wpikey] = $wpivalue;
}

echo '<pre>';
print_r($newarray);
echo '
';

Но это дает мне тот же результат.

Мой HTML, если это что-то прояснит:

<form class="addwerkplekinspectie" action="#" method="post">
    <div class="row">
        <div class="col-md-3">
            <p class="inputtitles">Werkplekinspectie template:</p>
        </div>
        <div class="col-md-9">
            <p class="inputtitles nomarginleft">jjjj</p>
        </div>
        <div class="col-md-3">
            <p class="inputtitles">Titel:</p>
        </div>
        <div class="col-md-9">
            <input type="text" name="informatie[titel]" class="form-control name_list">
        </div>
        <div class="col-md-3">
            <p class="inputtitles">Inspectienummer:</p>
        </div>
        <div class="col-md-9">
            <input type="text" name="informatie[inspectienummer]" class="form-control name_list">
        </div>
        <div class="col-md-3">
            <p class="inputtitles">Inspectiedatum:</p>
        </div>
        <div class="col-md-9">
            <input type="date" name="informatie[datum]" class="form-control name_list">
        </div>
        <div class="col-md-3">
            <p class="inputtitles">Naam inspecteur:</p>
        </div>
        <div class="col-md-9">
            <input type="text" name="informatie[naaminspecteur]" class="form-control name_list">
        </div>
        <div class="col-md-3">
            <p class="inputtitles">Locatie/Vestiging</p>
        </div>
        <div class="col-md-9">
            <input type="text" name="informatie[locatie]" class="form-control name_list">
        </div>
        <div class="col-md-3">
            <p class="inputtitles">Naam/ Namen geauditeerden</p>
        </div>
        <div class="col-md-9">
            <input type="text" name="informatie[naamgeauditeerden]" class="form-control name_list">
        </div>
    </div>

    <label class="categorytitle">jjjj</label>
    <div class="row">
        <div class="col-md-8">
            <p class="questionclass">hhhh</p>
        </div>
        <div class="col-md-4">
            <div class="container text-right">
                <input type="radio" name="questionlist[jjjj][hhhh]" id="radio-1" value="ok" required>
                <label class="radiotoggle" for="radio-1"><span class="radio">Ok</span></label>
                <input type="radio" name="questionlist[jjjj][hhhh]" id="radio-2" value="fout">
                <label class="radiotoggle" for="radio-2"><span class="radio">Fout</span></label>
                <input type="radio" name="questionlist[jjjj][hhhh]" id="radio-3" value="nvt">
                <label class="radiotoggle" for="radio-3"><span class="radio">N.v.t</span></label>
            </div>
        </div>
        <div class="col-md-8">
            <p class="questionclass">jjj</p>
        </div>
        <div class="col-md-4">
            <div class="container text-right">
                <input type="radio" name="questionlist[jjjj][jjj]" id="radio-4" value="ok" required>
                <label class="radiotoggle" for="radio-4"><span class="radio">Ok</span></label>
                <input type="radio" name="questionlist[jjjj][jjj]" id="radio-5" value="fout">
                <label class="radiotoggle" for="radio-5"><span class="radio">Fout</span></label>
                <input type="radio" name="questionlist[jjjj][jjj]" id="radio-6" value="nvt">
                <label class="radiotoggle" for="radio-6"><span class="radio">N.v.t</span></label>
            </div>
        </div>
    </div>
    <label class="categorytitle">Testt</label>
    <div class="row">
        <div class="col-md-8">
            <p class="questionclass">test</p>
        </div>
        <div class="col-md-4">
            <div class="container text-right">
                <input type="radio" name="questionlist[Testt][test]" id="radio-7" value="ok" required>
                <label class="radiotoggle" for="radio-7"><span class="radio">Ok</span></label>
                <input type="radio" name="questionlist[Testt][test]" id="radio-8" value="fout">
                <label class="radiotoggle" for="radio-8"><span class="radio">Fout</span></label>
                <input type="radio" name="questionlist[Testt][test]" id="radio-9" value="nvt">
                <label class="radiotoggle" for="radio-9"><span class="radio">N.v.t</span></label>
            </div>
        </div>
    </div>
</form>

1 Ответ

0 голосов
/ 20 января 2019

Попробуйте это.

//container for new array
$arr2 = [];

//loop over the outer parts of the array...
foreach($wpi as $sub_arr) {

    //...parse the namespace parts in the name field
    preg_match_all('/^[^\[]+|(?<=\[)[^\]]+(?=\])/', $sub_arr['name'], $parts);

    //...recursively add the values to a new, multi-dimensionsl array
    $append_to = &$arr2;
    foreach($parts[0] as $i => $part) {
        if (!array_key_exists($part, $append_to))
            $append_to[$part] = $i < count($parts[0]) - 1 ? [] : $sub_arr['value'];
        $append_to = &$append_to[$part];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...