从用ajax发布的序列化数组创建多维数组

时间:2018-11-14 09:49:13

标签: javascript php arrays ajax

我有一个包含三件事的列表,首先是整个列表的标题,然后用户可以在每个类别下动态添加带有问题的类别。

我需要将这些列表添加到我的数据库中,并且在发布时(使用带有serializeArray的ajax)具有当前的数组:

Array
(
    [0] => Array
        (
            [name] => lijsttitle
            [value] => Title
        )

    [1] => Array
        (
            [name] => category[]
            [value] => category 1
        )

    [2] => Array
        (
            [name] => question[]
            [value] => question 1
        )

    [3] => Array
        (
            [name] => question[]
            [value] => question 2
        )

    [4] => Array
        (
            [name] => question[]
            [value] => question 3
        )

    [5] => Array
        (
            [name] => category[]
            [value] => category 2
        )

    [6] => Array
        (
            [name] => question[]
            [value] => question 1
        )

    [7] => Array
        (
            [name] => question[]
            [value] => question 2
        )

)

所有问题和类别已经按照正确的顺序排列,但是我希望将它们分组在一起,就像这样:

Array
(
    [title] => Array
        (
            [value] => Title
        )

    [category 1] => Array
        (
            [question] => question 1
            [question] => question 2
            [question] => question 3
        )

    [category 2] => Array
        (
            [question] => question 1
            [question] => question 2
        )
)

或者,如果有更好的方法,也许是另一种方法。

我这样序列化表格:

$( ".lijstbutton" ).on( "click", function( event ) {
  event.preventDefault();
  url = 'includes/createlist.php';

  $lijst = $( '#lijstform' ).serializeArray();

  var posting = $.post(url, {lijst: $lijst});

    posting.done(function( data ) {
     $( ".lijstresult" ).empty().slideDown('fast').append( data );
   });
  });

为了显示我当前的数组,我在createlist.php中有以下代码:

echo '<pre>';
print_r($_POST['lijst']);
echo '</pre>';

最后,我需要链接到一个类别的所有问题以及链接到整个列表标题的所有类别。

因此,您可以有多个列表,每个列表及其类别以及这些类别下方的问题。

1 个答案:

答案 0 :(得分:1)

我会重新整理一下数据。您不能在'question'中多次使用array作为密钥。 $arr是发布的数据。

$store = [];

// pull off first arr element
$title = array_shift($arr);
// save title to store
$store['title'] = $title['name'];

$currCat = '';
foreach($arr as $a) {
  $val = $a['value'];
  // handle category
  if($a['name'] == 'category[]') {
    // save cat name
    $currCat = $val;
    // init questions array
    $store[$currCat] = [];
  }
  else {
    // add question to question array
    $store[$currCat][] = $val;
  }
}

print_r($store);