Я использую этот код, чтобы получить объект входных имен полей и значений для передачи в функцию AJAX.

var fields = {}; $("#wrap").find(":input").each(function() { fields[this.name] = $(this).val(); }); var obj = {fields: fields}; 

AJAX-вызов функции PHP

 var data = { 'action': 'my_function', 'fields': obj, }; jQuery.post( ajaxurl, data, function( response ) { console.log(response); }); 

Поля:

 {amp}lt;div id="wrap"{amp}gt; {amp}lt;input type="number" min="0" name="my_array[123][somelabel]" value=""{amp}gt; {amp}lt;input type="number" min="0" name="my_array[456][somelabel]" value=""{amp}gt; {amp}lt;/div{amp}gt; 

PHP просто делает:

 print_r( $_POST['fields'] ); 

Результат и мой ожидаемый результат

В журнале консоли ответа это возвращает массив с первым ключом полей как my_array[123

Я ожидаю, что это будет my_array[123] — почему он пропускает последний ] ?

Измените свой код назначения массива, как показано ниже: —

 var fields = []; //empty array $("#wrap").find(":input").each(function() { var obj = { $(this).attr('name'): $(this).val() }; //created object with key value pair fields.push(obj); //add object to array });