Code kürzen - wiederholenden Code in Funktion packen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Code kürzen - wiederholenden Code in Funktion packen

    Hi,

    irgendwie habe ich unheimliche Probleme effizienten Code zu schreiben, was an mangelnder praktischer Erfahrung liegt.

    Der nachfolgende Code wiederholt im Prinzip immer nur eine Sequenz, die dazu dient eine Ausgabe in Abhängigkeit zeilenweise aufzubauen.

    Wie müsste es aussehen, wenn die Code-Fragmente, die sich ständig wiederholen, in eine Funktion gepackt werden??


    Quellcode

    1. <?php
    2. include 'dbselect.php';
    3. include 'class_mdb.php';
    4. $campaignNamesArr = array();
    5. $campaignGuidArr = array();
    6. $campaignIdArr = array();
    7. $campaignCounter = 0;
    8. $rootNodes = array();
    9. $rootIds = array();
    10. $insertRootNodes = 0;
    11. $firstLevelNodes = array();
    12. $firstLevelIds = array();
    13. $insertFirstLevelNodes = 0;
    14. $firstLevelReference = array();
    15. $insertFirstLevelReference = 0;
    16. $secondLevelNodes = array();
    17. $firstLevelIds = array();
    18. $insertSecondLevelNodes = 0;
    19. $secondLevelReference = array();
    20. $insertSecondLevelReference = 0;
    21. $thirdLevelNodes = array();
    22. $thirdLevelIds = array();
    23. $insertThirdLevelNodes = 0;
    24. $thirdLevelReference = array();
    25. $insertThirdLevelReference = 0;
    26. $fourthLevelNodes = array();
    27. $fourthLevelIds = array();
    28. $insertFourthLevelNodes = 0;
    29. $fourthLevelReference = array();
    30. $insertFourthLevelReference = 0;
    31. $fivthLevelNodes = array();
    32. $fivthLevelIds = array();
    33. $insertFivthLevelNodes = 0;
    34. $FivthLevelReference = array();
    35. $insertFivthLevelReference = 0;
    36. $sixthLevelNodes = array();
    37. $sixthLevelIds = array();
    38. $insertSixthLevelNodes = 0;
    39. $sixthLevelReference = array();
    40. $insertSixthLevelReference = 0;
    41. $mdb = new mdb($dbselect);
    42. $mdb->open();
    43. $sql = "SELECT Campaigns.campaign_name, Campaigns.id, Campaigns.class_guid from Campaigns WHERE NOT Campaigns.category='Activity Group' ORDER BY Campaigns.campaign_name;";
    44. $mdb->execute($sql);
    45. while( !$mdb->eof() )
    46. {
    47. $campaignNamesArr[$campaignCounter] = iconv("ISO-8859-1","ISO-8859-1",$mdb->fieldvalue('campaign_name'));
    48. $campaignGuidArr[$campaignCounter] = iconv("ISO-8859-1","ISO-8859-1",$mdb->fieldvalue('class_guid'));
    49. $campaignIdArr[$campaignCounter] = iconv("ISO-8859-1","ISO-8859-1",$mdb->fieldvalue('id'));
    50. $campaignCounter++;
    51. $mdb->movenext();
    52. }
    53. // root Nodes
    54. for($rootCounter = 0; $rootCounter < $campaignCounter; $rootCounter++) {
    55. $mdbRoot = new mdb($dbselect);
    56. $mdbRoot->open();
    57. $sqlRoot = "SELECT Properties.property_name, Properties.value, Campaigns.campaign_name
    58. FROM Campaigns INNER JOIN (Activities INNER JOIN Properties ON Activities.id=Properties.activity_id) ON Campaigns.id=Activities.campaign_id
    59. WHERE Properties.property_name=\"Subordinate Campaign ID\" AND Properties.value=$campaignGuidArr[$rootCounter];";
    60. $mdbRoot->execute($sqlRoot);
    61. // wenn keine passende sub id gefunden wurde, wird der campaignname als root eingefuegt
    62. if ($mdbRoot->eof()) {
    63. $rootNodes[$insertRootNodes] = $campaignNamesArr[$rootCounter];
    64. $rootIds[$insertRootNodes] = $campaignIdArr[$rootCounter];
    65. $insertRootNodes++;
    66. }
    67. echo "$rootNodes[$insertRootNodes]";
    68. }
    69. // 1st level nodes
    70. for($sub1Counter = 0; $sub1Counter < $campaignCounter; $sub1Counter++) {
    71. $mdbSub1 = new mdb($dbselect);
    72. $mdbSub1->open();
    73. $sqlSub1 = "SELECT Properties.property_name, Properties.value, Campaigns.campaign_name
    74. FROM Campaigns INNER JOIN (Activities INNER JOIN Properties ON Activities.id=Properties.activity_id) ON Campaigns.id=Activities.campaign_id
    75. WHERE Properties.property_name=\"Subordinate Campaign ID\" AND Properties.value= $campaignGuidArr[$sub1Counter];";
    76. $mdbSub1->execute($sqlSub1);
    77. // wenn eine passende sub id gefunden
    78. while( !$mdbSub1->eof() )
    79. {
    80. // wird der name der uebergeordneten aktion ausglesen
    81. $campaignNameSub = iconv("ISO-8859-1","ISO-8859-1",$mdbSub1->fieldvalue('campaign_name')); // Image Kampagne
    82. // mit diesem namen wird das array aller aktionen durchlaufen
    83. for($i = 0; $i <= count($campaignNamesArr); $i++) {
    84. // sobald in diesem array der passende aktionsname gefunden wrude
    85. if($campaignNameSub == $rootNodes[$i]) {
    86. // wird der dem level array hinzugefuegt
    87. $firstLevelNodes[$insertFirstLevelNodes] = $campaignNamesArr[$sub1Counter];
    88. $firstLevelIds[$insertFirstLevelNodes] = $campaignIdArr[$sub1Counter];
    89. $firstLevelReference[$insertFirstLevelReference] = $campaignNameSub;
    90. $insertFirstLevelNodes++;
    91. $insertFirstLevelReference++;
    92. }
    93. }
    94. $mdbSub1->movenext();
    95. }
    96. }
    97. // 2st level nodes
    98. for($sub2Counter = 0; $sub2Counter < $campaignCounter; $sub2Counter++) {
    99. $mdbSub2 = new mdb($dbselect);
    100. $mdbSub2->open();
    101. $sqlSub2 = "SELECT Properties.property_name, Properties.value, Campaigns.campaign_name
    102. FROM Campaigns INNER JOIN (Activities INNER JOIN Properties ON Activities.id=Properties.activity_id) ON Campaigns.id=Activities.campaign_id
    103. WHERE Properties.property_name=\"Subordinate Campaign ID\" AND Properties.value=$campaignGuidArr[$sub2Counter];";
    104. $mdbSub2->execute($sqlSub2);
    105. // wenn eine passende sub id gefunden
    106. while( !$mdbSub2->eof() )
    107. {
    108. // wird der name der uebergeordneten aktion ausglesen
    109. $campaignNameSub = iconv("ISO-8859-1","ISO-8859-1",$mdbSub2->fieldvalue('campaign_name')); // Image Kampagne
    110. // mit diesem namen wird das array aller aktionen durchlaufen
    111. for($i = 0; $i <= count($campaignNamesArr); $i++) {
    112. // sobald in diesem array der passende aktionsname gefunden wrude
    113. if($campaignNameSub == $firstLevelNodes[$i]) {
    114. // wird der dem level array hinzugefuegt
    115. $secondLevelNodes[$insertSecondLevelNodes] = $campaignNamesArr[$sub2Counter];
    116. $secondLevelIds[$insertSecondLevelNodes] = $campaignIdArr[$sub2Counter];
    117. $secondLevelReference[$insertSecondLevelReference] = $campaignNameSub;
    118. $insertSecondLevelNodes++;
    119. $insertSecondLevelReference++;
    120. }
    121. }
    122. $mdbSub2->movenext();
    123. }
    124. }
    125. // 3st level nodes
    126. for($sub3Counter = 0; $sub3Counter < $campaignCounter; $sub3Counter++) {
    127. $mdbSub3 = new mdb($dbselect);
    128. $mdbSub3->open();
    129. $sqlSub3 = "SELECT Properties.property_name, Properties.value, Campaigns.campaign_name
    130. FROM Campaigns INNER JOIN (Activities INNER JOIN Properties ON Activities.id=Properties.activity_id) ON Campaigns.id=Activities.campaign_id
    131. WHERE Properties.property_name=\"Subordinate Campaign ID\" AND Properties.value=$campaignGuidArr[$sub3Counter];";
    132. $mdbSub3->execute($sqlSub3);
    133. // wenn eine passende sub id gefunden
    134. while( !$mdbSub3->eof() )
    135. {
    136. // wird der name der uebergeordneten aktion ausglesen
    137. $campaignNameSub = iconv("ISO-8859-1","ISO-8859-1",$mdbSub3->fieldvalue('campaign_name')); // Image Kampagne
    138. // mit diesem namen wird das array aller aktionen durchlaufen
    139. for($i = 0; $i <= count($campaignNamesArr); $i++) {
    140. // sobald in diesem array der passende aktionsname gefunden wrude
    141. if($campaignNameSub == $secondLevelNodes[$i]) {
    142. // wird der dem level array hinzugefuegt
    143. $thirdLevelNodes[$insertThirdLevelNodes] = $campaignNamesArr[$sub3Counter];
    144. $thirdLevelIds[$insertThirdLevelNodes] = $campaignIdArr[$sub3Counter];
    145. $thirdLevelReference[$insertThirdLevelReference] = $campaignNameSub;
    146. $insertThirdLevelNodes++;
    147. $insertThirdLevelReference++;
    148. }
    149. }
    150. $mdbSub3->movenext();
    151. }
    152. }
    153. // 4st level nodes
    154. for($sub4Counter = 0; $sub4Counter < $campaignCounter; $sub4Counter++) {
    155. $mdbSub4 = new mdb($dbselect);
    156. $mdbSub4->open();
    157. $sqlSub4 = "SELECT Properties.property_name, Properties.value, Campaigns.campaign_name
    158. FROM Campaigns INNER JOIN (Activities INNER JOIN Properties ON Activities.id=Properties.activity_id) ON Campaigns.id=Activities.campaign_id
    159. WHERE Properties.property_name=\"Subordinate Campaign ID\" AND Properties.value=$campaignGuidArr[$sub4Counter];";
    160. $mdbSub4->execute($sqlSub4);
    161. // wenn eine passende sub id gefunden
    162. while( !$mdbSub4->eof() )
    163. {
    164. // wird der name der uebergeordneten aktion ausglesen
    165. $campaignNameSub = iconv("ISO-8859-1","ISO-8859-1",$mdbSub4->fieldvalue('campaign_name')); // Image Kampagne
    166. // mit diesem namen wird das array aller aktionen durchlaufen
    167. for($i = 0; $i <= count($campaignNamesArr); $i++) {
    168. // sobald in diesem array der passende aktionsname gefunden wrude
    169. if($campaignNameSub == $thirdLevelNodes[$i]) {
    170. // wird der dem level array hinzugefuegt
    171. $fourthLevelNodes[$insertFourthLevelNodes] = $campaignNamesArr[$sub4Counter];
    172. $fourthLevelIds[$insertFourthLevelNodes] = $campaignIdArr[$sub4Counter];
    173. $fourthLevelReference[$insertFourthLevelReference] = $campaignNameSub;
    174. $insertFourthLevelNodes++;
    175. $insertFourthLevelReference++;
    176. }
    177. }
    178. $mdbSub4->movenext();
    179. }
    180. }
    181. // 5st level nodes
    182. for($sub5Counter = 0; $sub5Counter < $campaignCounter; $sub5Counter++) {
    183. $mdbSub5 = new mdb($dbselect);
    184. $mdbSub5->open();
    185. $sqlSub5 = "SELECT Properties.property_name, Properties.value, Campaigns.campaign_name
    186. FROM Campaigns INNER JOIN (Activities INNER JOIN Properties ON Activities.id=Properties.activity_id) ON Campaigns.id=Activities.campaign_id
    187. WHERE Properties.property_name=\"Subordinate Campaign ID\" AND Properties.value=$campaignGuidArr[$sub5Counter];";
    188. $mdbSub5->execute($sqlSub5);
    189. // wenn eine passende sub id gefunden
    190. while( !$mdbSub5->eof() )
    191. {
    192. // wird der name der uebergeordneten aktion ausglesen
    193. $campaignNameSub = iconv("ISO-8859-1","ISO-8859-1",$mdbSub5->fieldvalue('campaign_name')); // Image Kampagne
    194. // mit diesem namen wird das array aller aktionen durchlaufen
    195. for($i = 0; $i <= count($campaignNamesArr); $i++) {
    196. // sobald in diesem array der passende aktionsname gefunden wrude
    197. if($campaignNameSub == $fourthLevelNodes[$i]) {
    198. // wird der dem level array hinzugefuegt
    199. $fivthLevelNodes[$insertFivthLevelNodes] = $campaignNamesArr[$sub5Counter];
    200. $fivthLevelIds[$insertFivthLevelNodes] = $campaignIdArr[$sub5Counter];
    201. $fivthLevelReference[$insertFivthLevelReference] = $campaignNameSub;
    202. $insertFivthLevelNodes++;
    203. $insertFivthLevelReference++;
    204. }
    205. }
    206. $mdbSub5->movenext();
    207. }
    208. }
    209. // 6st level nodes
    210. for($sub6Counter = 0; $sub6Counter < $campaignCounter; $sub6Counter++) {
    211. $mdbSub6 = new mdb($dbselect);
    212. $mdbSub6->open();
    213. $sqlSub6 = "SELECT Properties.property_name, Properties.value, Campaigns.campaign_name
    214. FROM Campaigns INNER JOIN (Activities INNER JOIN Properties ON Activities.id=Properties.activity_id) ON Campaigns.id=Activities.campaign_id
    215. WHERE Properties.property_name=\"Subordinate Campaign ID\" AND Properties.value=$campaignGuidArr[$sub6Counter];";
    216. $mdbSub6->execute($sqlSub6);
    217. // wenn eine passende sub id gefunden
    218. while( !$mdbSub6->eof() )
    219. {
    220. // wird der name der uebergeordneten aktion ausglesen
    221. $campaignNameSub = iconv("ISO-8859-1","ISO-8859-1",$mdbSub6->fieldvalue('campaign_name')); // Image Kampagne
    222. // mit diesem namen wird das array aller aktionen durchlaufen
    223. for($i = 0; $i <= count($campaignNamesArr); $i++) {
    224. // sobald in diesem array der passende aktionsname gefunden wrude
    225. if($campaignNameSub == $fivthLevelNodes[$i]) {
    226. // wird der dem level array hinzugefuegt
    227. $sixthLevelNodes[$insertSixthLevelNodes] = $campaignNamesArr[$sub6Counter];
    228. $sixthLevelIds[$insertSixthLevelNodes] = $campaignIdArr[$sub6Counter];
    229. $sixthLevelReference[$insertSixthLevelReference] = $campaignNameSub;
    230. $insertSixthLevelNodes++;
    231. $insertSixthLevelReference++;
    232. }
    233. }
    234. $mdbSub6->movenext();
    235. }
    236. }
    237. for($i = 0; $i < count($rootNodes); $i++) {
    238. echo "".encodeStr($rootNodes[$i])." = insFld(foldersTree, gFld(\"".$rootNodes[$i]."\", \"".$rootIds[$i]."\"))\n<br>";
    239. }
    240. for($j = 0; $j < count($firstLevelNodes); $j++) {
    241. echo "".encodeStr($firstLevelNodes[$j])." = insFld(".encodeStr($firstLevelReference[$j]).", gFld(\"".$firstLevelNodes[$j]."\", \"tree.php?campaign=".$firstLevelIds[$j]."\"))\n<br>";
    242. }
    243. for($k = 0; $k < count($secondLevelNodes); $k++) {
    244. echo "".encodeStr($secondLevelNodes[$k])." = insFld(".encodeStr($secondLevelReference[$k]).", gFld(\"".$secondLevelNodes[$k]."\", \"tree.php?campaign=".$secondLevelIds[$k]."\"))\n<br>";
    245. }
    246. for($l = 0; $l < count($thirdLevelNodes); $l++) {
    247. echo "".encodeStr($thirdLevelNodes[$l])." = insFld(".encodeStr($thirdLevelReference[$l]).", gFld(\"".$thirdLevelNodes[$l]."\", \"tree.php?campaign=".$thirdLevelIds[$l]."\"))\n<br>";
    248. }
    249. for($m = 0; $m < count($fourthLevelNodes); $m++) {
    250. echo "".encodeStr($fourthLevelNodes[$m])." = insFld(".encodeStr($fourthLevelReference[$m]).", gFld(\"".$fourthLevelNodes[$m]."\", \"tree.php?campaign=".$fourthLevelIds[$m]."\"))\n<br>";
    251. }
    252. for($n = 0; $n < count($fivthLevelNodes); $n++) {
    253. echo "".encodeStr($fivthLevelNodes[$n])." = insFld(".encodeStr($fivthLevelReference[$n]).", gFld(\"".$fivthLevelNodes[$n]."\", \"tree.php?campaign=".$fivthLevelIds[$n]."\"))\n<br>";
    254. }
    255. for($o = 0; $o < count($sixthLevelNodes); $o++) {
    256. echo "".encodeStr($sixthLevelNodes[$o])." = insFld(".encodeStr($sixthLevelReference[$o]).", gFld(\"".$sixthLevelNodes[$o]."\", \"tree.php?campaign=".$sixthLevelIds[$o]."\"))\n<br>";
    257. }
    258. function encodeStr($string) {
    259. $sonderzeichen = array(" ", "ä", "ö", "ü", "ß", "-", "+");
    260. $string = str_replace($sonderzeichen, "_", $string);
    261. return $string;
    262. }
    263. ?>
    Alles anzeigen
    Um Rekursionen zu verstehen, muss man zuerst Rekursionen verstehen...
  • Super, danke schonmal, allerdings stimmt da was nicht.

    Und zwar ist es so, dass sich in jedem Code Fragement eine Sache ändern, nämlich

    Quellcode

    1. // sobald in diesem array der passende aktionsname gefunden wrude
    2. if($campaignNameSub == $rootNodes[$i]) {
    3. ...



    Quellcode

    1. // sobald in diesem array der passende aktionsname gefunden wrude
    2. if($campaignNameSub == $firstLevelNodes[$i]) {
    3. ...


    Quellcode

    1. // sobald in diesem array der passende aktionsname gefunden wrude
    2. if($campaignNameSub == $secondLevelNodes[$i]) {
    3. ...


    Quellcode

    1. // sobald in diesem array der passende aktionsname gefunden wrude
    2. if($campaignNameSub == $thirdLevelNodes[$i]) {
    3. ...


    und so weiter.

    Momentan, bei Deine Code, werden nur die Root-Nodes ausgegeben.

    Wie bewerkstelligt man das, so dass alle Nodes ausgegeben werden?
    Um Rekursionen zu verstehen, muss man zuerst Rekursionen verstehen...
  • oh, das hab ich gar nicht gesehen...

    naja, in dem falle einfach noch das vorherige Element mitübergeben
    Könntest übrigens überall die count() Funktion außerhalb der Schleife packen
    Ansonsten, wird das array bei jedem durchlauf neu gezählt

    Quellcode

    1. <?php
    2. include 'dbselect.php';
    3. include 'class_mdb.php';
    4. $campaignNamesArr = array();
    5. $campaignGuidArr = array();
    6. $campaignIdArr = array();
    7. $campaignCounter = 0;
    8. $levelNodes = array(
    9. 0 => array( /* ROOT NODES */
    10. 'LevelNodes' => array(),
    11. 'LevelIds' => array(),
    12. 'insertLevelNodes' => array(),
    13. 'LevelReference' => false,
    14. 'insertLevelReference' => false),
    15. 1 => array( /* FirstLevel Nodes */
    16. 'LevelNodes' => array(),
    17. 'LevelIds' => array(),
    18. 'insertLevelNodes' => array(),
    19. 'LevelReference' => array(),
    20. 'insertLevelReference' => 0),
    21. 2 => array( /* Second .... */
    22. 'LevelNodes' => array(),
    23. 'LevelIds' => array(),
    24. 'insertLevelNodes' => array(),
    25. 'LevelReference' => array(),
    26. 'insertLevelReference' => 0),
    27. 3 => array(
    28. 'LevelNodes' => array(),
    29. 'LevelIds' => array(),
    30. 'insertLevelNodes' => array(),
    31. 'LevelReference' => array(),
    32. 'insertLevelReference' => 0),
    33. 4 => array(
    34. 'LevelNodes' => array(),
    35. 'LevelIds' => array(),
    36. 'insertLevelNodes' => array(),
    37. 'LevelReference' => array(),
    38. 'insertLevelReference' => 0),
    39. 5 => array(
    40. 'LevelNodes' => array(),
    41. 'LevelIds' => array(),
    42. 'insertLevelNodes' => array(),
    43. 'LevelReference' => array(),
    44. 'insertLevelReference' => 0),
    45. 6 => array(
    46. 'LevelNodes' => array(),
    47. 'LevelIds' => array(),
    48. 'insertLevelNodes' => array(),
    49. 'LevelReference' => array(),
    50. 'insertLevelReference' => 0)
    51. );
    52. $mdb = new mdb($dbselect);
    53. $mdb->open();
    54. $sql = "SELECT Campaigns.campaign_name, Campaigns.id, Campaigns.class_guid from Campaigns WHERE NOT Campaigns.category='Activity Group' ORDER BY Campaigns.campaign_name;";
    55. $mdb->execute($sql);
    56. while( !$mdb->eof() )
    57. {
    58. $campaignNamesArr[$campaignCounter] = iconv("ISO-8859-1","ISO-8859-1",$mdb->fieldvalue('campaign_name'));
    59. $campaignGuidArr[$campaignCounter] = iconv("ISO-8859-1","ISO-8859-1",$mdb->fieldvalue('class_guid'));
    60. $campaignIdArr[$campaignCounter] = iconv("ISO-8859-1","ISO-8859-1",$mdb->fieldvalue('id'));
    61. $campaignCounter++;
    62. $mdb->movenext();
    63. }
    64. $count = count($levelNodes);
    65. for($i=0; $i<$count; $i++) {
    66. //Referenzen werden verwendet, damit die Arrays auch außerhalb der Funktion verändert werden
    67. echo levelNode(&$levelNodes[$i]['LevelNodes'], &$levelNodes[$i]['LevelIds'], &$levelNodes[$i]['insertLevelNodes'],
    68. &$levelNodes[$i]['LevelReference'], &$levelNodes[$i]['insertLevelReference'], ($i>0 ? $prev : false));
    69. $prev &= $levelNodes[$i]['levelNodes'];
    70. }
    71. function encodeStr($string) {
    72. $sonderzeichen = array(" ", "ä", "ö", "ü", "ß", "-", "+");
    73. $string = str_replace($sonderzeichen, "_", $string);
    74. return $string;
    75. }
    76. function levelNode($nodes, $ids, $insertNodes, $reference, $insertReference, $previousNodes)
    77. {
    78. $outputHTML = "";
    79. for($counter = 0; $counter < $campaignCounter; $counter++) {
    80. $mdbSub1 = new mdb($dbselect);
    81. $mdbSub1->open();
    82. $sqlSub1 = "SELECT Properties.property_name, Properties.value, Campaigns.campaign_name
    83. FROM Campaigns INNER JOIN (Activities INNER JOIN Properties
    84. ON Activities.id=Properties.activity_id) ON Campaigns.id=Activities.campaign_id
    85. WHERE Properties.property_name=\"Subordinate Campaign ID\" AND Properties.value= $campaignGuidArr[$counter];";
    86. $mdbSub1->execute($sqlSub1);
    87. // wenn keine passende sub id gefunden wurde, wird der campaignname als root eingefuegt
    88. if ($mdbRoot->eof()) {
    89. $root = true;
    90. $nodes[$insertNodes] = $campaignNamesArr[$counter];
    91. $ids[$insertNodes] = $campaignIdArr[$counter];
    92. $insertNodes++;
    93. //$outputHTML .= $nodes[$insertNodes];
    94. $outputHTML .= "".encodeStr($nodes[$j])." = insFld(".encodeStr($reference[$j]).
    95. ", gFld(\"".$nodes[$j]."\", \"tree.php?campaign=".$ids[$j]."\"))\n<br>";
    96. } else {// wenn eine passende sub id gefunden
    97. $root = false;
    98. while( !$mdbSub1->eof() )
    99. {
    100. // wird der name der uebergeordneten aktion ausglesen
    101. $campaignNameSub = iconv("ISO-8859-1","ISO-8859-1", $mdbSub1->fieldvalue('campaign_name')); // Image Kampagne
    102. // mit diesem namen wird das array aller aktionen durchlaufen
    103. $count = count($campaignNamesArr);
    104. for($i = 0; $i <= $count; $i++) {
    105. // sobald in diesem array der passende aktionsname gefunden wrude
    106. if($campaignNameSub == $previousNodes[$i]) {
    107. // wird der dem level array hinzugefuegt
    108. $nodes[$insertNodes] = $campaignNamesArr[$counter];
    109. $ids[$insertNodes] = $campaignIdArr[$counter];
    110. $reference[$insertReference] = $campaignNameSub;
    111. $insertNodes++;
    112. $insertReference++;
    113. $outputHTML .= "".encodeStr($nodes[$j])." = insFld(foldersTree, gFld(\"".$nodes[$j].
    114. "\", \"".$ids[$j]."\"))\n<br>";
    115. }
    116. }
    117. $mdbSub1->movenext();
    118. }
    119. }
    120. }
    121. return $outputHTML;
    122. }
    123. ?>
    Alles anzeigen
  • Ich bekomme da einen Parser Error .... liegt das an meiner PHP Version? (5.0)

    Parse error: parse error, unexpected '&' on line 66

    Also hier:

    &$levelNodes[$i]['LevelReference'], &$levelNodes[$i]['insertLevelReference'], ($i>0 ? &$levelNodes[$i-1]['levelNodes'] : false));


    Bzgl. der Logik; ist im Prinzip ganz einfach. Es gibt Projekte, dazugehörige Tätigkeiten und Eigenschaften dieser Tätigkeiten. Sollte in einer Eigenschaft einer Tätigkeit, die zu einem bestimmten Projekt gehört, "Subordinate Campaign ID" enthalten sein, dann kann über den dazugehörigen Wert festgestellt werden, welches "Vater"-Projekt über dem gerade aktuell abgefragten Projekt (d.h. und zwar herauszufinden über die Tatigkeitseigenschaft->Tätigkeit->Projekt) steht.

    So soll eine Baumstruktur aller Projekte aufgebaut werden, die in der Datenbank vorhanden sind.
    Um Rekursionen zu verstehen, muss man zuerst Rekursionen verstehen...
  • ne, fehler kann ich bestätigen - hatte den code bei mir nicht laufen lassen
    lag an der referenz - die konnte er nicht ohne weiteres mit fragezeichenoperator verwenden

    hab die for schleife aktualisiert

    Quellcode

    1. for($i=0; $i<count($levelNodes); $i++) {
    2. //Referenzen werden verwendet, damit die Arrays auch außerhalb der Funktion verändert werden
    3. echo levelNode(&$levelNodes[$i]['LevelNodes'], &$levelNodes[$i]['LevelIds'], &$levelNodes[$i]['insertLevelNodes'],
    4. &$levelNodes[$i]['LevelReference'], &$levelNodes[$i]['insertLevelReference'], ($i>0 ? $prev : false));
    5. $prev &= $levelNodes[$i]['levelNodes'];
    6. }


    weitere änderungen siehe oben