回答編集履歴
4
修正
    
        answer	
    CHANGED
    
    | 
         @@ -45,7 +45,7 @@ 
     | 
|
| 
       45 
45 
     | 
    
         
             
            ```JavaScript
         
     | 
| 
       46 
46 
     | 
    
         
             
            selectQuery.dataEncode = function(data){
         
     | 
| 
       47 
47 
     | 
    
         
             
                if(typeof data != 'object')return false;
         
     | 
| 
       48 
     | 
    
         
            -
                return encodeURIComponent("entry") + "=" + encodeURIComponent(data);
         
     | 
| 
      
 48 
     | 
    
         
            +
                return encodeURIComponent("entry") + "=" + encodeURIComponent(JSON.stringify(data));
         
     | 
| 
       49 
49 
     | 
    
         
             
            }
         
     | 
| 
       50 
50 
     | 
    
         
             
            ```
         
     | 
| 
       51 
51 
     | 
    
         
             
            PHP側はこうです。あと、array_mergeして$_GETと$_POSTを結合してますが、PHPには[$_REQUEST](http://php.net/manual/ja/reserved.variables.request.php)というGETとPOSTとCOOKIEをくっつけた変数が用意されています。
         
     | 
3
誤字修正
    
        answer	
    CHANGED
    
    | 
         @@ -48,7 +48,7 @@ 
     | 
|
| 
       48 
48 
     | 
    
         
             
                return encodeURIComponent("entry") + "=" + encodeURIComponent(data);
         
     | 
| 
       49 
49 
     | 
    
         
             
            }
         
     | 
| 
       50 
50 
     | 
    
         
             
            ```
         
     | 
| 
       51 
     | 
    
         
            -
            PHP側はこうです。あと、 
     | 
| 
      
 51 
     | 
    
         
            +
            PHP側はこうです。あと、array_mergeして$_GETと$_POSTを結合してますが、PHPには[$_REQUEST](http://php.net/manual/ja/reserved.variables.request.php)というGETとPOSTとCOOKIEをくっつけた変数が用意されています。
         
     | 
| 
       52 
52 
     | 
    
         
             
            ```PHP
         
     | 
| 
       53 
53 
     | 
    
         
             
            $input = json_decode($_REQUEST["entry"]);
         
     | 
| 
       54 
54 
     | 
    
         
             
            ```
         
     | 
2
追記2
    
        answer	
    CHANGED
    
    | 
         @@ -25,4 +25,30 @@ 
     | 
|
| 
       25 
25 
     | 
    
         
             
            }
         
     | 
| 
       26 
26 
     | 
    
         
             
            // 半角スペースを+に変える処理はすでにencodeURIComponentがやっているので削除
         
     | 
| 
       27 
27 
     | 
    
         
             
            return params.join( '&' );
         
     | 
| 
      
 28 
     | 
    
         
            +
            ```
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            ###追記
         
     | 
| 
      
 31 
     | 
    
         
            +
            ご自分で書かれたコードを理解しておられないようなので1次元配列になる理由を説明します。
         
     | 
| 
      
 32 
     | 
    
         
            +
            ```JavaScript
         
     | 
| 
      
 33 
     | 
    
         
            +
            selectQuery.dataEncode = function(data){
         
     | 
| 
      
 34 
     | 
    
         
            +
                if(typeof data != 'object')return false;
         
     | 
| 
      
 35 
     | 
    
         
            +
                var params = [];
         
     | 
| 
      
 36 
     | 
    
         
            +
                for(var idx in data){
         
     | 
| 
      
 37 
     | 
    
         
            +
                    var tmp = data[idx];
         
     | 
| 
      
 38 
     | 
    
         
            +
                    if(tmp.length < 1)return false;
         
     | 
| 
      
 39 
     | 
    
         
            +
                    params.push(idx + '=' + JSON.stringify(tmp));
         
     | 
| 
      
 40 
     | 
    
         
            +
                }
         
     | 
| 
      
 41 
     | 
    
         
            +
                 return params.join( '&' ).replace( /%20/g, '+' );
         
     | 
| 
      
 42 
     | 
    
         
            +
            }
         
     | 
| 
      
 43 
     | 
    
         
            +
            ```
         
     | 
| 
      
 44 
     | 
    
         
            +
            このdataEncodeというfunctionに渡されてくるdataという変数は、あなたの用意したentryという多次元配列です。entryの外側の配列をfor文で回して、それぞれをパラメータ化しているから"0=['test','AA123456','test','pass']&1=["test2"]&2=['test3','BB123456']"という形になるのはむしろ正しい動作です。entryの形を維持したまま渡したいのであれば、下記のようなコードが正しいです。
         
     | 
| 
      
 45 
     | 
    
         
            +
            ```JavaScript
         
     | 
| 
      
 46 
     | 
    
         
            +
            selectQuery.dataEncode = function(data){
         
     | 
| 
      
 47 
     | 
    
         
            +
                if(typeof data != 'object')return false;
         
     | 
| 
      
 48 
     | 
    
         
            +
                return encodeURIComponent("entry") + "=" + encodeURIComponent(data);
         
     | 
| 
      
 49 
     | 
    
         
            +
            }
         
     | 
| 
      
 50 
     | 
    
         
            +
            ```
         
     | 
| 
      
 51 
     | 
    
         
            +
            PHP側はこうです。あと、array_margeして$_GETと$_POSTを結合してますが、PHPには[$_REQUEST](http://php.net/manual/ja/reserved.variables.request.php)というGETとPOSTとCOOKIEをくっつけた変数が用意されています。
         
     | 
| 
      
 52 
     | 
    
         
            +
            ```PHP
         
     | 
| 
      
 53 
     | 
    
         
            +
            $input = json_decode($_REQUEST["entry"]);
         
     | 
| 
       28 
54 
     | 
    
         
             
            ```
         
     | 
1
追記
    
        answer	
    CHANGED
    
    | 
         @@ -12,4 +12,17 @@ 
     | 
|
| 
       12 
12 
     | 
    
         
             
            ```PHP
         
     | 
| 
       13 
13 
     | 
    
         
             
            $json = $_REQUEST['data'];
         
     | 
| 
       14 
14 
     | 
    
         
             
            $array = json_decode($json, true); // $arrayには配列の形で格納されます
         
     | 
| 
      
 15 
     | 
    
         
            +
            ```
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            ###追記
         
     | 
| 
      
 18 
     | 
    
         
            +
            1次元配列になってしまう原因は、yambejpさんが正解だと思います。postする内容のパラメータ名、パラメータ値はそれぞれencodeURIComponentでエンコードしてやらないと、PHP側がうまくクエリを解析できません。jQueryのajax通信など、方法によっては勝手にそのへんの処理をしてくれるのですが、XMLHttpRequestはそのあたりを自前でやらなければいけません。
         
     | 
| 
      
 19 
     | 
    
         
            +
            ```JavaScript
         
     | 
| 
      
 20 
     | 
    
         
            +
            for(var idx in data){
         
     | 
| 
      
 21 
     | 
    
         
            +
                var tmp = data[idx];
         
     | 
| 
      
 22 
     | 
    
         
            +
                if(tmp.length < 1)return false;
         
     | 
| 
      
 23 
     | 
    
         
            +
                // ここでパラメータ名とパラメータ値をencodeURIComponentをかけておく
         
     | 
| 
      
 24 
     | 
    
         
            +
                params.push(encodeURIComponent(idx) + '=' + encodeURIComponent(JSON.stringify(tmp)));
         
     | 
| 
      
 25 
     | 
    
         
            +
            }
         
     | 
| 
      
 26 
     | 
    
         
            +
            // 半角スペースを+に変える処理はすでにencodeURIComponentがやっているので削除
         
     | 
| 
      
 27 
     | 
    
         
            +
            return params.join( '&' );
         
     | 
| 
       15 
28 
     | 
    
         
             
            ```
         
     |