Spreadsheet_Excel_Writer über funktion ansprechen

südpol

Erfahrenes Mitglied
Hi,

ich habe gerade ein kleines PHP Problem. Vermutlich die die Lösung aber sehr einfach ich kenne Sie nur nicht, weil ich php nur aus Büchern gelernt habe :-(

Ich erzeuge mit der php pear Erweiterung Spreadsheet_Excel_Writer ein Excel Dokument, dass ist soweit auch kein Problem. Ich schreibe z. B. eine Zeile so raus:

PHP:
$worksheet->write($i, $j++, $res['name'], $bold_grey);

ok funktioniert soweit wunderbar. Jetzt muss ich jedoch eine Funktion mit einbauen, die mehr oder weniger eine beliebig Tiefe Staffelung haben kann. Sprich es gibt eine mysql Tabelle die Daten in der Form enthält:

ID | Text | subordinated

wenn in subordinated nicht die gleiche id steht wie im feld id dann ist das ganze nur ein unterthema und eine funktion soll die in subordinated genannte id aufrufen daten ins excel schreiben und sich selbst wieder aufrufen und testen ob die id = subordinated ist. Ok, die funktion an sich ist auch recht einfach und sie so aus:

PHP:
function subordinated($p_id, $subordinated, $dbconnect, $worksheet) {
        if($p_id != $subordinated) {
            $query = "SELECT A.p_id, A.name, A.longname, A.description, A.subordinated
                      FROM phase AS A
                      WHERE A.p_id = '".$subordinated."'
                      LIMIT 1";
            logger("create_excel_sheet111",$query,LOG_LEVEL_DEBUG);
            $dbconnect->executeQuery($query);

            $worksheet->write($i, $j++, $res['name'],$bold_grey);
            $worksheet->write($i, $j++, $res['longname'],$bold_grey);
            $worksheet->write($i, $j++, $res['description'],$bold_grey);

            subordinated($res['p_id'], $res['subordinated'], $dbconnect, $worksheet);
        }
    }

wobei, dbconnect der link auf meine mysql - klasse ist. Die funktion logger schreibt einfach nur ein log über die ausgeführten Befehle in genanntem Modus. (als nicht relevant).

Ich sehe im logger auch, dass die funktion soweit richtig durchläuft jedoch werden die excel befehle scheibar nicht berücksichtigt. kann mir jemand sagen wie ich das schaffe, dass das geht? Ich habe den link auf worksheet sicherheitshalber schon übergeben... ohne erfolg *heul*

Bin für jeden tipp dankbar!
 
Hi,

ok einen Fehler habe ich schon gefunden. Ich hatte vergessen den Zähler $i zu übergeben bzw. wieder zurück zu geben. Das habe ich jetzt erledit.

Noch eine Frage bei der ich mir gerade nicht mehr so sicher bin - kann sich eine funktion selber aufrufen?

Gruß
 
Original geschrieben von südpol
Noch eine Frage bei der ich mir gerade nicht mehr so sicher bin - kann sich eine funktion selber aufrufen?
Klar, sonst wäre ja Rekursion niemals möglich ;)

PHP:
function foo($someVar) {
    if($someVar == false) {
        $someVar = 'bar';
        foo($someVar);
    } else {
        echo $someVar;
    }
}
Nur mal so als keines Beispiel.
 
Hi,

ok um das Problem mit der excel klasse zu umgehen habe ich die funktion nun wie folgt umgeschrieben:

PHP:
function subordinated_test($p_id, $subordinated, $dbconnect) {
        if($p_id != $subordinated) {
            $query = "SELECT A.p_id, A.name, A.longname, A.description, A.subordinated
                      FROM phase AS A
                      WHERE A.p_id = '".$subordinated."'
                      LIMIT 1";
            logger("create_excel_sheet111",$query,LOG_LEVEL_DEBUG);
            $dbconnect->executeQuery($query);

            $topic = array();
            $topic['name'] = $res['name'];
            $topic['longname'] = $res['longname'];
            $topic['description'] = $res['description'];

            return $topic;

            subordinated_test($res['p_id'], $res['subordinated'], $dbconnect);

        }
    }

ich fange die Werte dann mit

PHP:
$data_container = array();
$data_container[] = subordinated_test(werte...);

ab. Kann das so gehen? Sprich gib die function bei jeder Ihrer runden den wert an mein array zurück oder nicht?

Gruß
 
Zurück