Создайте многомерный массив из сериализованного массива, размещенного с помощью ajax - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть список из трех вещей: сначала заголовок для всего списка, затем пользователь может динамически добавлять категории с вопросами под каждой категорией.

Мне нужно добавить эти списки в свою базу данных и в настоящее времяэтот массив при публикации (используя ajax с serializeArray):

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:

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

В конце мне нужны все вопросы, связанные с категорией, и все категории, связанные с заголовком всего списка.

Таким образом, вы можете иметь несколько списков, каждый со своими категориями и вопросами.ниже этих категорий.

1 Ответ

0 голосов
/ 14 ноября 2018

Я бы немного переставил данные.Вы не можете использовать 'question' в качестве ключа несколько раз в array.$arr это POSTed данные.

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