2010-05-17 4 views
0

Je suis un gars C# et j'ai obtenu cette logique en php à partir d'un site Web. Besoin de mettre en œuvre la même chose en C#.Aide à comprendre le code PHP en C#

$items = array(); 
while($row = mysql_fetch_assoc($query)) 
{ 
//parent id 
$pkey = $row['parent_id']; 
//child id 
$ckey = $row['category_id']; 
//store this 
$items[$pkey]['children'][$ckey] = $row['categoryname']; 
} 
//create our list 
$first = true; 
//create our list 
createList($items, $first); 

function createList($array, $first) 
{ 
//we need access to the original array 
global $items; 
//first is a flag on whether or not this is the first item in the array 
//we use this flag so that you don't need to initially call the function using createList($array[0]['children']) 
if($first){ 
    $array = $array[0]['children']; 
} 
echo "<ol>\n"; 
foreach($array as $key => $value){ 
    echo "<li>{$value}"; 
    //if this item does have children, display them 
    if(isset($items[$key]['children'])){ 
    echo "\n"; 
    createList($items[$key]['children'], false); //set $first to false! 
    } 
    echo "</li>\n"; 
} 
echo "</ol>\n"; 

}

Dans la dernière ligne ci-dessus est une matrice 3 dimensions ou Hashtable? il semble que c'est une cause de hashtable [$ pkey] ['children'] [$ ckey] m'embête.

Quelqu'un peut-il convertir le code ci-dessus en C#? J'apprécierais vraiment.

Répondre

2

PHP (et quelques autres langages) utilisent des dictionnaires (tableaux associatifs) comme structures de données universelles. En PHP, array() crée une structure de dictionnaire non typée qui peut être imbriquée. En C#, le même code ne serait pas écrit en utilisant des dictionnaires mais plutôt des structures de données fortement typées. Cela signifie que vous devez créer des classes individuelles pour représenter ces structures de données, avec des variables membres au lieu des paires clé-valeur des tableaux associatifs dans le code PHP.

+0

Merci pour l'explication Konrad. Pouvez-vous m'aider à traduire en C#? Je ne suis pas un expert mais je peux essayer si l'exemple donné. – user342944

+0

quelque chose comme ça? http://csharptutorial.com/blog/use-strongly-typed-generics-dictionary-data-structure-to-lookup-constants/ – user342944

0

Vous pouvez modéliser ces données avec une structure Dictionary<string, Dictionary<string, string>>. La première partie du code, qui remplit la structure irait comme ceci:

Dictionary<string, Dictionary<string, string>> items 
        = new Dictionary<string, Dictionary<string, string>>(); 
string pkey, ckey; 

foreach (Dictionary<string, string> row in fetch(query)) 
{ 
    //parent id 
    pkey = row["parent_id"]; 

    //child id 
    ckey = ""; 
    if (row.ContainsKey("category_id")) ckey = row["category_id"]; 

    //store this 
    Dictionary<string, string> children; 
    if (items.ContainsKey(pkey)) children = items[pkey]; 
    else children = new Dictionary<string, string>(); 

    if (ckey.Length != 0) children[ckey] = row["categoryname"]; 

    items[pkey] = children; 
} 
+0

alors la boucle complète de chaque est de remplir les enfants de chaque élément? hummm – user342944