2014-01-22 187 views
0

我在我的SQL數據庫中創建了一個包含mysql_fetch_array的PHP數組。 我用ajax和jQuery將它檢索到JavaScript。關聯與索引數組

我的問題是,JavaScript創建了兩個數組,一個簡單和一個關聯,而不是PHP,其中兩個都在一個。

當我通過與索引值myArray[0]訪問它更新的小區,在同一小區myArray['col1']的締合值不被更新。

有沒有辦法從索引值中獲得獨立單元格的密鑰,以便我可以同時更新兩個數組?

更新:

這裏是PHP代碼を生成陣列(XY)。

$query = mysql_query("SELECT * FROM details_moteurs ORDER BY m_no_inventaire ASC") 
    $i=0; 
    while ($infosMoteurs = mysql_fetch_array($query)) { 
     $arrayMoteur[$i] = $infosMoteurs; 
     $i++; 
    } 

我的表details_moteurs的firt列M_ID

// javascript code 
Alert($arrayMoteur[0][0]) // give '1524' 
Alert($arrayMoteur[0]['m_id']) // give me '1524' 

但是,如果我想更新我的兩維數組與細胞:

$arrayMoteur[0][0] = 'xyz'; 
alert($arrayMoteur[0]['m_id']) // give me '1524' 

而且相同:

$arrayMoteur[0]['m_id'] = 'xyz'; 
    alert($arrayMoteur[0][0]) // give me '1524' 

而我的問題是,我用了一個循環:

for(x = 0;x < arraySize;x++){ 
     for(y = 0;y < lineSize;x++){ 
      if(something){ 
       $arrayMoteur[x][y] = 'xyz'; 
      } 
     } 
    } 

================= ===============================================

好的,我修好了。

我換成mysql_fetch_assoc mysql_fetch_array只得到一個數組,我糾正了我的循環使用:

for(var x in array) 
     for(var y in array[x]){ 
      if(something){ 
       $arrayMoteur[x][y] = 'xyz'; 
      } 
     } 
    } 
+0

Javascript是如何創建2個數組的?我不確定你的意思是「在PHP中都在一個」 –

+0

也許你應該向我們展示生成ajax響應的PHP代碼(以及響應體本身)...... – Bergi

+2

這就是JQuery所做的:純黑魔法;) 。告訴我們你的咒語,我們將看到什麼shazam出錯了。 –

回答

1

JavaScript不創建兩個單獨的數組 - 它只是簡單地創建一個對象,你可以參考它通過的屬性一個關聯數組語法。試試下面的出控制檯:

var test = []; 
test[0] = "value0"; 
test["col1"] = "value1"; 
test["col2"] = "value2"; 
console.log(test.length); 

如果你運行上面的代碼,你會看到,數組的長度是實際上只是1.鍵的值「COL1」和「COL2」被添加爲屬性添加到數組對象,而不是數組中的條目。假設所有已添加到你的JavaScript數組中的條目是字符串,那麼就可以很容易地循環通過所有的鍵,以便使用此(例如,產生的所有的PHP的鍵是字符串。):

for (key in test) { 
    console.log(test[key]); 
} 

上面在我們的例子中的代碼將打印出來:

value0 
value1 
value2 

希望這可以清除你的javascript數組/對象發生了什麼。

更新:如果你需要/想要0 ..n個元素與關聯引用您剛開始創建JavaScript對象後,你的財產,你可以執行此匹配:

var test = []; 
test["col1"] = "value1"; 
test["col2"] = "value2"; 

var i = 0; 
for (key in test) { 
    test[i] = test[key]; 
    i++; 
} 

在上面的例子中,你實際上有4個按鍵結束。運行此代碼:

for (key in test) { 
    console.log("[" + key + "] --> " + test[key]); 
} 

輸出:

[0] --> value1 
[1] --> value2 
[col1] --> value1 
[col2] --> value2 

但是,你也可以只使用索引數這樣拉兩個關聯值:

for (var j = 0; j < test.length; j++) { 
    console.log("[" + j + "] --> " + test[j]); 
} 

這將只打印了2值是這樣的:

[0] --> value1 
[1] --> value2 

再次,希望這有助於!

+0

你好,當你從SQL查詢中用mysql_fetch_array構建一個數組時,你可以用'myArray [0]'或'myArray ['sqlCol0Name']'來訪問你的數組。但是如果你嘗試用'myArray [0] ='xxx';'來更新值,並且你用alert(myArray ['sqlCol0Name'])來訪問它;'舊值仍然存在,只有'alert(myArray [ 0]);'會返回更新的值。 –

+0

myArray [0]和myArray ['sqlCol0Name']在Javascript中不是一回事。 Javascript不是PHP。創建javascript對象後,數組中對第0個元素的引用與對名爲「sqlCol0Name」的屬性的引用不同。 –

+0

我的問題是沒有得到價值,它已經工作,但覆蓋他們,看到更新的第一篇文章。 :) –