Prova questo. Sono sicuro che ci sono soluzioni migliori.


codice HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script language="JavaScript" type="text/javascript">
<!--
function invia(){
      
      var arr = new Array();
      var elm = document.getElementById("myform").elements.length;
      for (i=0;i<elm;i++) {
       nam    = document.getElementById("myform").elements[i].name;      
        val    = document.getElementById("myform").elements[i].value;
       val    = val.replace(/\"/g,'\\"');
       alert(val);
       arr[i] = '"'+nam+'":"'+val+'"';
      } 
      var xxx = arr.join();
      param = '{'+xxx+'}'; 
                       
      $.ajax({
             url  : 'test9065b.php',
             type : 'POST',
             data : 'param=' + param, 
       dataType : 'html'
           }).done(function(html) {$('#log').html(html)}) ;
} 
//-->
</script>
</head>
<body>
<form method="post" id="myform">
 <input type="text" name="b[1]" /><br />
 <input type="text" name="b[2]" /><br />
 <input type="text" name="b[3]" /><br />
 <input type="text" name="b[4]" /><br />
 <input type="text" name="pippo" /><br /> 
</form>
<input type="button" value='Invia' onclick='invia()' />
<div id='log'></div>
</body>
</html>
file test9065b.php

Codice PHP:

<?php 
$array 
json_decode($_POST['param'],true);
foreach (
$array as $key => $value) {
 print 
"$key => $value <br/>";
}
 
?>