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??
Alles anzeigen
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
- <?php
- include 'dbselect.php';
- include 'class_mdb.php';
- $campaignNamesArr = array();
- $campaignGuidArr = array();
- $campaignIdArr = array();
- $campaignCounter = 0;
- $rootNodes = array();
- $rootIds = array();
- $insertRootNodes = 0;
- $firstLevelNodes = array();
- $firstLevelIds = array();
- $insertFirstLevelNodes = 0;
- $firstLevelReference = array();
- $insertFirstLevelReference = 0;
- $secondLevelNodes = array();
- $firstLevelIds = array();
- $insertSecondLevelNodes = 0;
- $secondLevelReference = array();
- $insertSecondLevelReference = 0;
- $thirdLevelNodes = array();
- $thirdLevelIds = array();
- $insertThirdLevelNodes = 0;
- $thirdLevelReference = array();
- $insertThirdLevelReference = 0;
- $fourthLevelNodes = array();
- $fourthLevelIds = array();
- $insertFourthLevelNodes = 0;
- $fourthLevelReference = array();
- $insertFourthLevelReference = 0;
- $fivthLevelNodes = array();
- $fivthLevelIds = array();
- $insertFivthLevelNodes = 0;
- $FivthLevelReference = array();
- $insertFivthLevelReference = 0;
- $sixthLevelNodes = array();
- $sixthLevelIds = array();
- $insertSixthLevelNodes = 0;
- $sixthLevelReference = array();
- $insertSixthLevelReference = 0;
- $mdb = new mdb($dbselect);
- $mdb->open();
- $sql = "SELECT Campaigns.campaign_name, Campaigns.id, Campaigns.class_guid from Campaigns WHERE NOT Campaigns.category='Activity Group' ORDER BY Campaigns.campaign_name;";
- $mdb->execute($sql);
- while( !$mdb->eof() )
- {
- $campaignNamesArr[$campaignCounter] = iconv("ISO-8859-1","ISO-8859-1",$mdb->fieldvalue('campaign_name'));
- $campaignGuidArr[$campaignCounter] = iconv("ISO-8859-1","ISO-8859-1",$mdb->fieldvalue('class_guid'));
- $campaignIdArr[$campaignCounter] = iconv("ISO-8859-1","ISO-8859-1",$mdb->fieldvalue('id'));
- $campaignCounter++;
- $mdb->movenext();
- }
- // root Nodes
- for($rootCounter = 0; $rootCounter < $campaignCounter; $rootCounter++) {
- $mdbRoot = new mdb($dbselect);
- $mdbRoot->open();
- $sqlRoot = "SELECT Properties.property_name, Properties.value, Campaigns.campaign_name
- FROM Campaigns INNER JOIN (Activities INNER JOIN Properties ON Activities.id=Properties.activity_id) ON Campaigns.id=Activities.campaign_id
- WHERE Properties.property_name=\"Subordinate Campaign ID\" AND Properties.value=$campaignGuidArr[$rootCounter];";
- $mdbRoot->execute($sqlRoot);
- // wenn keine passende sub id gefunden wurde, wird der campaignname als root eingefuegt
- if ($mdbRoot->eof()) {
- $rootNodes[$insertRootNodes] = $campaignNamesArr[$rootCounter];
- $rootIds[$insertRootNodes] = $campaignIdArr[$rootCounter];
- $insertRootNodes++;
- }
- echo "$rootNodes[$insertRootNodes]";
- }
- // 1st level nodes
- for($sub1Counter = 0; $sub1Counter < $campaignCounter; $sub1Counter++) {
- $mdbSub1 = new mdb($dbselect);
- $mdbSub1->open();
- $sqlSub1 = "SELECT Properties.property_name, Properties.value, Campaigns.campaign_name
- FROM Campaigns INNER JOIN (Activities INNER JOIN Properties ON Activities.id=Properties.activity_id) ON Campaigns.id=Activities.campaign_id
- WHERE Properties.property_name=\"Subordinate Campaign ID\" AND Properties.value= $campaignGuidArr[$sub1Counter];";
- $mdbSub1->execute($sqlSub1);
- // wenn eine passende sub id gefunden
- while( !$mdbSub1->eof() )
- {
- // wird der name der uebergeordneten aktion ausglesen
- $campaignNameSub = iconv("ISO-8859-1","ISO-8859-1",$mdbSub1->fieldvalue('campaign_name')); // Image Kampagne
- // mit diesem namen wird das array aller aktionen durchlaufen
- for($i = 0; $i <= count($campaignNamesArr); $i++) {
- // sobald in diesem array der passende aktionsname gefunden wrude
- if($campaignNameSub == $rootNodes[$i]) {
- // wird der dem level array hinzugefuegt
- $firstLevelNodes[$insertFirstLevelNodes] = $campaignNamesArr[$sub1Counter];
- $firstLevelIds[$insertFirstLevelNodes] = $campaignIdArr[$sub1Counter];
- $firstLevelReference[$insertFirstLevelReference] = $campaignNameSub;
- $insertFirstLevelNodes++;
- $insertFirstLevelReference++;
- }
- }
- $mdbSub1->movenext();
- }
- }
- // 2st level nodes
- for($sub2Counter = 0; $sub2Counter < $campaignCounter; $sub2Counter++) {
- $mdbSub2 = new mdb($dbselect);
- $mdbSub2->open();
- $sqlSub2 = "SELECT Properties.property_name, Properties.value, Campaigns.campaign_name
- FROM Campaigns INNER JOIN (Activities INNER JOIN Properties ON Activities.id=Properties.activity_id) ON Campaigns.id=Activities.campaign_id
- WHERE Properties.property_name=\"Subordinate Campaign ID\" AND Properties.value=$campaignGuidArr[$sub2Counter];";
- $mdbSub2->execute($sqlSub2);
- // wenn eine passende sub id gefunden
- while( !$mdbSub2->eof() )
- {
- // wird der name der uebergeordneten aktion ausglesen
- $campaignNameSub = iconv("ISO-8859-1","ISO-8859-1",$mdbSub2->fieldvalue('campaign_name')); // Image Kampagne
- // mit diesem namen wird das array aller aktionen durchlaufen
- for($i = 0; $i <= count($campaignNamesArr); $i++) {
- // sobald in diesem array der passende aktionsname gefunden wrude
- if($campaignNameSub == $firstLevelNodes[$i]) {
- // wird der dem level array hinzugefuegt
- $secondLevelNodes[$insertSecondLevelNodes] = $campaignNamesArr[$sub2Counter];
- $secondLevelIds[$insertSecondLevelNodes] = $campaignIdArr[$sub2Counter];
- $secondLevelReference[$insertSecondLevelReference] = $campaignNameSub;
- $insertSecondLevelNodes++;
- $insertSecondLevelReference++;
- }
- }
- $mdbSub2->movenext();
- }
- }
- // 3st level nodes
- for($sub3Counter = 0; $sub3Counter < $campaignCounter; $sub3Counter++) {
- $mdbSub3 = new mdb($dbselect);
- $mdbSub3->open();
- $sqlSub3 = "SELECT Properties.property_name, Properties.value, Campaigns.campaign_name
- FROM Campaigns INNER JOIN (Activities INNER JOIN Properties ON Activities.id=Properties.activity_id) ON Campaigns.id=Activities.campaign_id
- WHERE Properties.property_name=\"Subordinate Campaign ID\" AND Properties.value=$campaignGuidArr[$sub3Counter];";
- $mdbSub3->execute($sqlSub3);
- // wenn eine passende sub id gefunden
- while( !$mdbSub3->eof() )
- {
- // wird der name der uebergeordneten aktion ausglesen
- $campaignNameSub = iconv("ISO-8859-1","ISO-8859-1",$mdbSub3->fieldvalue('campaign_name')); // Image Kampagne
- // mit diesem namen wird das array aller aktionen durchlaufen
- for($i = 0; $i <= count($campaignNamesArr); $i++) {
- // sobald in diesem array der passende aktionsname gefunden wrude
- if($campaignNameSub == $secondLevelNodes[$i]) {
- // wird der dem level array hinzugefuegt
- $thirdLevelNodes[$insertThirdLevelNodes] = $campaignNamesArr[$sub3Counter];
- $thirdLevelIds[$insertThirdLevelNodes] = $campaignIdArr[$sub3Counter];
- $thirdLevelReference[$insertThirdLevelReference] = $campaignNameSub;
- $insertThirdLevelNodes++;
- $insertThirdLevelReference++;
- }
- }
- $mdbSub3->movenext();
- }
- }
- // 4st level nodes
- for($sub4Counter = 0; $sub4Counter < $campaignCounter; $sub4Counter++) {
- $mdbSub4 = new mdb($dbselect);
- $mdbSub4->open();
- $sqlSub4 = "SELECT Properties.property_name, Properties.value, Campaigns.campaign_name
- FROM Campaigns INNER JOIN (Activities INNER JOIN Properties ON Activities.id=Properties.activity_id) ON Campaigns.id=Activities.campaign_id
- WHERE Properties.property_name=\"Subordinate Campaign ID\" AND Properties.value=$campaignGuidArr[$sub4Counter];";
- $mdbSub4->execute($sqlSub4);
- // wenn eine passende sub id gefunden
- while( !$mdbSub4->eof() )
- {
- // wird der name der uebergeordneten aktion ausglesen
- $campaignNameSub = iconv("ISO-8859-1","ISO-8859-1",$mdbSub4->fieldvalue('campaign_name')); // Image Kampagne
- // mit diesem namen wird das array aller aktionen durchlaufen
- for($i = 0; $i <= count($campaignNamesArr); $i++) {
- // sobald in diesem array der passende aktionsname gefunden wrude
- if($campaignNameSub == $thirdLevelNodes[$i]) {
- // wird der dem level array hinzugefuegt
- $fourthLevelNodes[$insertFourthLevelNodes] = $campaignNamesArr[$sub4Counter];
- $fourthLevelIds[$insertFourthLevelNodes] = $campaignIdArr[$sub4Counter];
- $fourthLevelReference[$insertFourthLevelReference] = $campaignNameSub;
- $insertFourthLevelNodes++;
- $insertFourthLevelReference++;
- }
- }
- $mdbSub4->movenext();
- }
- }
- // 5st level nodes
- for($sub5Counter = 0; $sub5Counter < $campaignCounter; $sub5Counter++) {
- $mdbSub5 = new mdb($dbselect);
- $mdbSub5->open();
- $sqlSub5 = "SELECT Properties.property_name, Properties.value, Campaigns.campaign_name
- FROM Campaigns INNER JOIN (Activities INNER JOIN Properties ON Activities.id=Properties.activity_id) ON Campaigns.id=Activities.campaign_id
- WHERE Properties.property_name=\"Subordinate Campaign ID\" AND Properties.value=$campaignGuidArr[$sub5Counter];";
- $mdbSub5->execute($sqlSub5);
- // wenn eine passende sub id gefunden
- while( !$mdbSub5->eof() )
- {
- // wird der name der uebergeordneten aktion ausglesen
- $campaignNameSub = iconv("ISO-8859-1","ISO-8859-1",$mdbSub5->fieldvalue('campaign_name')); // Image Kampagne
- // mit diesem namen wird das array aller aktionen durchlaufen
- for($i = 0; $i <= count($campaignNamesArr); $i++) {
- // sobald in diesem array der passende aktionsname gefunden wrude
- if($campaignNameSub == $fourthLevelNodes[$i]) {
- // wird der dem level array hinzugefuegt
- $fivthLevelNodes[$insertFivthLevelNodes] = $campaignNamesArr[$sub5Counter];
- $fivthLevelIds[$insertFivthLevelNodes] = $campaignIdArr[$sub5Counter];
- $fivthLevelReference[$insertFivthLevelReference] = $campaignNameSub;
- $insertFivthLevelNodes++;
- $insertFivthLevelReference++;
- }
- }
- $mdbSub5->movenext();
- }
- }
- // 6st level nodes
- for($sub6Counter = 0; $sub6Counter < $campaignCounter; $sub6Counter++) {
- $mdbSub6 = new mdb($dbselect);
- $mdbSub6->open();
- $sqlSub6 = "SELECT Properties.property_name, Properties.value, Campaigns.campaign_name
- FROM Campaigns INNER JOIN (Activities INNER JOIN Properties ON Activities.id=Properties.activity_id) ON Campaigns.id=Activities.campaign_id
- WHERE Properties.property_name=\"Subordinate Campaign ID\" AND Properties.value=$campaignGuidArr[$sub6Counter];";
- $mdbSub6->execute($sqlSub6);
- // wenn eine passende sub id gefunden
- while( !$mdbSub6->eof() )
- {
- // wird der name der uebergeordneten aktion ausglesen
- $campaignNameSub = iconv("ISO-8859-1","ISO-8859-1",$mdbSub6->fieldvalue('campaign_name')); // Image Kampagne
- // mit diesem namen wird das array aller aktionen durchlaufen
- for($i = 0; $i <= count($campaignNamesArr); $i++) {
- // sobald in diesem array der passende aktionsname gefunden wrude
- if($campaignNameSub == $fivthLevelNodes[$i]) {
- // wird der dem level array hinzugefuegt
- $sixthLevelNodes[$insertSixthLevelNodes] = $campaignNamesArr[$sub6Counter];
- $sixthLevelIds[$insertSixthLevelNodes] = $campaignIdArr[$sub6Counter];
- $sixthLevelReference[$insertSixthLevelReference] = $campaignNameSub;
- $insertSixthLevelNodes++;
- $insertSixthLevelReference++;
- }
- }
- $mdbSub6->movenext();
- }
- }
- for($i = 0; $i < count($rootNodes); $i++) {
- echo "".encodeStr($rootNodes[$i])." = insFld(foldersTree, gFld(\"".$rootNodes[$i]."\", \"".$rootIds[$i]."\"))\n<br>";
- }
- for($j = 0; $j < count($firstLevelNodes); $j++) {
- echo "".encodeStr($firstLevelNodes[$j])." = insFld(".encodeStr($firstLevelReference[$j]).", gFld(\"".$firstLevelNodes[$j]."\", \"tree.php?campaign=".$firstLevelIds[$j]."\"))\n<br>";
- }
- for($k = 0; $k < count($secondLevelNodes); $k++) {
- echo "".encodeStr($secondLevelNodes[$k])." = insFld(".encodeStr($secondLevelReference[$k]).", gFld(\"".$secondLevelNodes[$k]."\", \"tree.php?campaign=".$secondLevelIds[$k]."\"))\n<br>";
- }
- for($l = 0; $l < count($thirdLevelNodes); $l++) {
- echo "".encodeStr($thirdLevelNodes[$l])." = insFld(".encodeStr($thirdLevelReference[$l]).", gFld(\"".$thirdLevelNodes[$l]."\", \"tree.php?campaign=".$thirdLevelIds[$l]."\"))\n<br>";
- }
- for($m = 0; $m < count($fourthLevelNodes); $m++) {
- echo "".encodeStr($fourthLevelNodes[$m])." = insFld(".encodeStr($fourthLevelReference[$m]).", gFld(\"".$fourthLevelNodes[$m]."\", \"tree.php?campaign=".$fourthLevelIds[$m]."\"))\n<br>";
- }
- for($n = 0; $n < count($fivthLevelNodes); $n++) {
- echo "".encodeStr($fivthLevelNodes[$n])." = insFld(".encodeStr($fivthLevelReference[$n]).", gFld(\"".$fivthLevelNodes[$n]."\", \"tree.php?campaign=".$fivthLevelIds[$n]."\"))\n<br>";
- }
- for($o = 0; $o < count($sixthLevelNodes); $o++) {
- echo "".encodeStr($sixthLevelNodes[$o])." = insFld(".encodeStr($sixthLevelReference[$o]).", gFld(\"".$sixthLevelNodes[$o]."\", \"tree.php?campaign=".$sixthLevelIds[$o]."\"))\n<br>";
- }
- function encodeStr($string) {
- $sonderzeichen = array(" ", "ä", "ö", "ü", "ß", "-", "+");
- $string = str_replace($sonderzeichen, "_", $string);
- return $string;
- }
- ?>
Um Rekursionen zu verstehen, muss man zuerst Rekursionen verstehen...