2017-09-27 77 views
0

我有一個表格,我使用多維輸入,如<input type="text" name="input1[]" />如何重新排列POST數組?

我正在使用JavaScript以編程方式將新輸入行添加到佈局等表格中。發佈數據後,我將驗證數據,然後將其插入到我的數據庫中。

目前,我不得不重複,像這樣:

for ($i = 0; $i < count($_POST[array_keys($_POST)[0]]); $i++) { 
    $query = $mysqli->prepare("INSERT INTO my_table(col1, col2, col3) VALUES(?, ?, ?)"); 
    $a = $_POST["input1"][$i]; 
    $b = $_POST["input2"][$i]; 
    $c = $_POST["input3"][$i]; 
    $query->bind_param("sss", $a, $b, $c); 
    $query->execute(); 
} 

注:我的代碼有顯著減少到一切必要的問題。

雖然,我寧願重複,像這樣:

for ($i = 0; $i < count($_POST); $i++) { 
    $query = $mysqli->prepare("INSERT INTO my_table(col1, col2, col3) VALUES(?, ?, ?)"); 
    $a = $_POST[$i]["input1"]; 
    $b = $_POST[$i]["input2"]; 
    $c = $_POST[$i]["input3"]; 
    $query->bind_param("sss", $a, $b, $c); 
    $query->execute(); 
} 

我意識到,這兩個是非常相似的,但我更喜歡後者的做法,如果儘可能看起來更加清晰易讀。

回答

1

下面的代碼應該做的伎倆:

function neatify_post(&$post) 
{ 
    $tmp = array(); 
    for ($i = 0; $i < count($post[array_keys($post)[0]]); $i++) { 
     for ($j = 0; $j < count($post); $j++) { 
      $tmp[$i][array_keys($post)[$j]] = $post[array_keys($post)[$j]][$i]; 
     } 
    } 
    return $post = $tmp; 
} 

neatify_post($_POST); 

這是沒有必要設置$ _ POST等於函數的返回,因爲它是passed by reference