これに関して他にもいくつか質問があることを認識しており、それらを読んで解決策を試みましたが、うまくいきません。jQuery/JavaScript でシリアル化されたフォーム全体を渡しているため、投稿を 2 回シリアル化している可能性があります。
私の PHP 配列は 2 次元ですか? ファイル名を含むもの:
$aDocumentFilesArrayFileName[0][0];
通常、PHPには1次元配列があるため、次を使用して渡します。
<input type="hidden" name="arrayName[]" value="$value[$i]"> // (while in a loop
最初の配列を名前で参照するときに使用する構文と、使用する値がわかりません。
値を serialize($aDocumentFilesArrayFileName) として使用し、反対側でデコードしようとしましたが、string expected found array? というエラーが表示されます。
** 編集 **
質問をより明確にすることもできたと思いますが、明確にするためです。これが私のjQuery Ajax送信関数です:
var conflictData = $("input, select", conflictsTable.fnGetNodes()).serialize(); // fnGetNodes is just a datatables function to go through every row in a table - don't worry about that
$.ajax(
{
type: 'POST',
url: 'sqlHandleConflictsDocumentRegister.php?node='+nodeType+'&id='+nodeId,
cache: false,
data: conflictData,
success: function(result)
{
// Do stuff here
}
});
PHP 入力ステートメントをシリアル化するのではなく、json_encode を使用するソリューションを試しました。それは機能していません。PHPフォームで使用する正確なコードを次に示します。この行は、フォーム内のテーブルの各行に対して発生するループ内にあることに注意してください。
<input type="hidden" name="arrayFileName[]" value="<?php echo json_encode($aDocumentFilesArrayFileName[$i]); ?>">
PHP ajaxスクリプトで使用するコードは次のとおりです。
$fileNames = json_decode($_POST['arrayFileName']);
エラー: json_decode() は、パラメーター 1 が文字列であると想定しています。配列は、65 行目の C:\wamp\www\document\sqlHandleConflictsDocumentRegister.php で指定されています
配列データのさまざまな次元を (JavaScript で) シリアライズしているという問題はありますか? 私の他の入力は、単純な配列データ (各行に 1 つの値) を持つ行からのもので、正常に動作します。この特定の配列入力には、テーブル行ごとに関連付けられたファイル名の数に制限がないため、入力値は配列です。
また、別の入力で (テーブルの行ごとに) ファイルの量の値を渡します。おそらく、これを使用して、反対側の配列を抽出することができます。
<input type="hidden" name="quantityFiles[]" value="<?php echo $aDocumentQuantityFiles[$i]; ?>">
** アップデート **
私は alert(conflictData) を使用しましたが、arrayFileName フィールドが空であることを除けば、配列データは正常であることがわかりました。json_encode($aDocumentFilesArrayFileName[$i]) をエコーすると、期待どおりの結果が得られます。
したがって、jQuery serialize() がこのデータを破壊しているように見えます。おそらく、ajax 送信用にデータ変数をより適切に準備する方法はありますか?
** 更新 2 **
皆様のご支援と回答への貢献に感謝いたします。私はすでに json_encode を使用して、そこで操作するためにデータを javascript に取得していたので、入力フィールドを使用してデータをシリアル化して送信することを断念し、代わりに $.ajax の data パラメータを直接使用して処理のために配列を送信しました。
明確に正しい解決策が提供されていないため、以下に解決策を投稿し、目的の PHP ファイルで多次元配列データを取得できるようになったため、正解としてマークします。