2012-04-12 71 views
2

我目前正在一個c#/ php項目中,我需要從c#中的數據庫中檢索一些數據,並將數據發送到數組並將數組發送到php。從c發佈數組到php#

雖然我通過數據庫我添加字符串值轉換爲字符串列表數組,一旦完成我然後調用循環:

string[] myData = myList.toArray(); 

然後我嘗試後myData的使用到PHP以下代碼

Dictionary<string, string> report = new Dictionary<string, string>(); 
report.add("data", myData.toString()); 
    WebRequest request = WebRequest.Create(domain + appRoot + "/administrator/engine/email-alarms.php"); 
        request.Method = "POST"; 
        StringBuilder b = new StringBuilder(); 
        foreach (KeyValuePair<string, string> data in report) 
        { 
         b.Append(HttpUtility.UrlEncode(data.Key)).Append("=").Append(HttpUtility.UrlEncode(data.Value ?? "")).Append("&"); 
        } 
        string postData = b.ToString(0, b.Length - 1); 
        byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
        request.ContentType = "application/x-www-form-urlencoded"; 
        request.ContentLength = byteArray.Length; 

        Stream dataStream = request.GetRequestStream(); 
        dataStream.Write(byteArray, 0, byteArray.Length); 
        dataStream.Close(); 

        WebResponse response = request.GetResponse(); 
    Console.writeLine(response); 

我意識到說myData.toString()不這樣做,因爲它只是打印System.String []但是如果我不這樣做,然後我在C#代碼得到一個錯誤的正確的事說有一個無效的論點。

我該怎麼辦把數組發佈到php?

感謝您提供的任何幫助。

回答

1

解碼如果你只是要序列string[](尚不清楚,但我想你想的是,是真正的問題在這裏),然後只是...

string.Join(",", myData) 

應輸出eg 1, 2, 3...

2

您始終可以使用json格式作爲您的交換合約格式,並將其轉換回其原生表示並相應地處理您的數據。 c#和php都有支持json格式的函數/庫。

C#序列化使用:

var postData=new JavascriptSerializer().Serialize(object); 

,並在PHP中您可以使用json_decode()方法。我不知道它如何在PHP中工作。

希望這有助於。

2

更新:更改爲甚至不需要List<string>。你可以迭代你的原始數組。增加了PHP代碼。

如果你希望你的PHP腳本中的$_POST["data"]是一個字符串數組,那麼有不需要序列化爲JSON或其他格式。 PHP可以接受發佈的數組。你只需要以正確的方式去做。

更改此:

Dictionary<string, string> report = new Dictionary<string, string>(); 
report.add("data", myData.toString()); 
// ... 
foreach (KeyValuePair<string, string> data in report) 
{ 
    b.Append(HttpUtility.UrlEncode(data.Key)).Append("=").Append(HttpUtility.UrlEncode(data.Value ?? "")).Append("&"); 
} 

這個(你不再需要List<string>,因爲你可以通過你的陣列直接迭代,並創建一個可發佈陣列:

foreach (string data in myData) 
{ 
    b.Append(HttpUtility.UrlEncode("data[]")).Append("=").Append(HttpUtility.UrlEncode(data ?? "")).Append("&"); 
} 

這將導致data鍵入您的POST:

string[] myData = new [] { "blah", "something", "else" }; 

被張貼爲:

data[]=blah&data[]=something&data[]=else 

這將導致在PHP端(我希望)成功創建數組。

在PHP中,你應該再能夠做到這一點:

foreach ($_POST["data"] as $value) 
{ 
    echo $value; 
} 
+1

+1:看起來在這種情況下,最直接的方法。 – hakre 2012-04-13 00:15:05