Я не очень разбираюсь в php, но я думаю, что вы должны упорядочить данную строку во что-то более похожее на сетку (например, в csv-подобный файл), а затем легко разобрать ее с помощью c #.
Поскольку строка, которую вы даете, в основном php, вы можете проанализировать ее с помощью синтаксического анализатора php (direclty в php или в c #) и, анализируя лексемы, можете построить свою сетку.
Посмотрите здесь некоторые подсказки -> Быстрый анализ PHP в C #
РЕДАКТИРОВАТЬ 1:
в любом случае, если структура всегда одна и та же (т. е. Array ([0] => Array («нет массива внутри») [1] => Array («нет массива внутри») ...), вы можете проанализировать его в c # с помощью Regex
РЕДАКТИРОВАТЬ 2:
Я имею в виду что-то вроде этого (это очень грубо, но проверено):
Regex arrayRegex = new Regex(@"Array[ \t]*\((.+)\)");
Regex rowRegex = new Regex(@"\[([^\]]+)\] => Array \( ([^)]+)[ \t]*\)");
Regex entryRegex = new Regex(@"\[([^\]]+)\] => ([^\]\[]+)");
var rows = new List<SortedDictionary<string,string>>();
var matches = arrayRegex.Matches(textToParse);
foreach (Match match in matches)
{
if (match.Groups.Count != 2)
throw new Exception("Invalid array");
var rowsMactches = rowRegex.Matches(match.Groups[1].Value);
foreach (Match rowMatch in rowsMactches)
{
var rowDict = new SortedDictionary<string, string>();
if (rowMatch.Groups.Count != 3)
throw new Exception("Invalid row");
var entryMatches = entryRegex.Matches(rowMatch.Groups[2].Value);
foreach (Match entryMatch in entryMatches)
{
if (entryMatch.Groups.Count != 3)
throw new Exception("Invalid entry");
string key = entryMatch.Groups[1].Value;
string val = entryMatch.Groups[2].Value;
rowDict.Add(key, val);
}
rows.Add(rowDict);
}
}
// use the first row to build the columns (N.B. we suppose all dictionaries have the same keys)
var firstRow = rows.First();
DataTable dt = new DataTable();
foreach (string colName in firstRow.Keys)
{
dt.Columns.Add(colName);
}
foreach (var row in rows)
{
dt.Rows.Add(row.Values.Cast<object>().ToArray());
}