2012-08-29 47 views
3

數組$solution是二維的。我需要將其內容保存到SQL表中。但是,在保存之前,我需要檢查$solution[i][0]是否屬於查詢SELECT num_arr FROM Schedule WHERE num_arr<>''的結果。Implode逗號在二維數組的第i行

問題出在線$vals = implode(...)。如何在陣列$solution的第i行內爆英文逗號?現在這條線的結果是字符串0,0,0,0而不是正確的值。

$columns_land = array("`num_arr`","`start`","`fin`","`way`"); 
    $cols_land = implode(",",$columns_land); 

    for($i=0; $i<sizeof($solution); $i++) { 
      $vals = implode(',', array_map('implode_comma', $solution[$i])); 
      query_land = "INSERT INTO `Sequence` (" . $cols_land . ") 
          VALUES " . $vals . " 
          WHERE num_arr='".$solution[$i][0]."' 
          AND num_arr IN (SELECT num_arr FROM Schedule WHERE num_arr<>'')"; 

      $result_land = execute_query($query_land); 
    } 

    function implode_comma($arr) { 
     return '(' . implode(',', $arr) . ')'; 
    } 
+0

in implode_comma函數,請在使用臨時變量返回之前嘗試獲取輸出。 – Shubhansh

回答

1

這一說法我感到困惑:

$vals = implode(',', array_map('implode_comma', $solution[$i])); 

由於implode_comma()期待一個陣列,在$solution[$i]每個項目也必須是一個數組;但這意味着$solutions本身必須是三維陣列。

我想你可以只寫你的這個循環中,而不是:

$vals = implode(',', $solution[$i]); 
$query_land = "INSERT INTO `Sequence` ($cols_land) 
    VALUES ($vals) 
    WHERE num_arr='".$solution[$i][0]."' 
    AND num_arr IN (SELECT num_arr FROM Schedule WHERE num_arr<>'')"; 

$result_land = execute_query($query_land); 

順便說一句,你應該正確逃生你在SQL中使用的變量,但我不能告訴你正在使用的數據庫層,所以我把它留給你。

+0

如果我使用$ vals = implode(',',$ solution [$ i]);,那麼我會得到不帶引號的值:VALUES(BT01451087,2012-08-29 15:47,2012-08-29 16:10, 1)。 –

+0

@youkuper這是因爲你的原始代碼沒有引用這些值:)如我所說,我不知道你使用的是什麼數據庫API –