2009-07-06 5 views
0

Ich möchte bis zum Punkt eine Reihe von Werten aus der Funktion zurück sie existieren .... zum Beispiel ....PHP - Funktion Rückgabewerte dynamisch

function abc($i="3"){ 

    for($a=1;$a<=$i;$a++) { 
     $name='t'.$i; 
     $$name = "ae".$a; 
    } 
    //now i am returning values 
    return array($t1,$t2,$t3,$t4,$t5,$t6,$t7,$t8,$t9,$t10); 
    //but i only want to return $t1,$t2,$t3 depending on $i 
} 

Danke ....

@therefromhere ich bin auch ein Array in der Schleife zu schaffen, werde ich den ursprünglichen Code einfügen müssen, damit sie in einer besseren Art und Weise verstehen kann

function extracting_comments($table, $fields,$condition,$order,$limit){ 
     $query="SELECT ".$fields." 
       FROM ".$table." 
       WHERE ".$condition." 
       ORDER BY ".$order." 
       LIMIT ".$limit." "; 
     if($stmt = $this->conn->prepare($query)) { 
      $stmt->execute(); 
      $row = array_pad(array(), $stmt->field_count, ''); 
      $params = array(); 
       foreach($row as $k=>$v) { 
        $params[] = &$row[$k]; 
        echo $params[0]; 
       } 
      call_user_func_array(array($stmt,'bind_result'),$params); 
      $i=0; 
      while($stmt->fetch()) { 
      $i++; 
      $name='t'.$i; 
      $$name = array(); 
      foreach ($row as $b=>$elem) { 
      $atul[$b]=$row[$b]; 
      } 
      $$name=$atul; 
      } 
      return array($t1,$t2,$t3,$t4,$t5,$t6,$t7,$t8,$t9,$t10); 
      $stmt->close(); 
     } 

    } 

jetzt ihr sind nur 5 Datenzeilen so ihr keinen Sinn Rückkehr $ t6 $ t7 $ t8 $ t9 $ t10 , und ich will es beheben, und ich rufe die Funktion mit

$extract=extracting_comments($table, $fields,$condition,$order,$limit); 

bitte helfen. .thanks

Antwort

1

Ich glaube, das wird Ihnen helfen. Sie haben sehr komplizierten Code mit einer Menge von Nebenwirkungen und Fehler, sollten Sie überlegen, es neu zu erstellen. Auch das Setzen von Anweisungen nach der Rückgabe hat keine Auswirkungen, da sie nicht aufgerufen würde.

function extracting_comments($table, $fields,$condition,$order,$limit){ 
       $query="SELECT ".$fields." 
           FROM ".$table." 
           WHERE ".$condition." 
           ORDER BY ".$order." 
           LIMIT ".$limit." "; 
       if($stmt = $this->conn->prepare($query)) { 
         $stmt->execute(); 
         $row = array_pad(array(), $stmt->field_count, ''); 
         $params = array(); 
           foreach($row as $k=>$v) { 
            $params[] = &$row[$k]; 
            echo $params[0]; 
           } 
         call_user_func_array(array($stmt,'bind_result'),$params); 
         $i=0; 
         $result = array(); 
         while($stmt->fetch()) { 
         $i++; 
         foreach ($row as $b=>$elem) { 
         $atul[$b]=$row[$b]; 
         } 
         $result[]=$atul; 
         } 
         $stmt->close(); 
         return $result; 
       } 

     } 
+0

vielen Dank ...... Artem Barger Problem für gute gelöst – halocursed

+0

hey Artem .... jetzt habe ich meinen Code acc geändert. zu deiner Antwort ist es jetzt fehlerfrei, oder ist ihr ein besser, dies zu tun .... Wenn ja, bitte zeigen Sie mir die richtige Richtung ... Ich hoffe, Sie wissen, was ich mit dieser Funktion versuche – halocursed

+0

Um ehrlich zu sein, Ich bin mir nicht ganz sicher, was genau Sie hier vorhaben. Aber es sieht so aus, als hätten Sie viel redundanten Code produziert. Wahrscheinlich lohnt es sich, die Seite http://php.net zu lesen, um die Konstruktion, die Sie hier verwenden, besser zu verstehen. –

10

bauen Sie einfach das Array in Ihrer for Schleife:

function abc($i=3) { 
    $array = array(); 
    for ($a=1; $a<=$i; $a++) { 
     $array[] = "ae".$a; 
    } 
    return $array; 
} 

Nachdem Sie Ihre Frage bearbeiten ein enthüllen uns Ihr eigentliches Problem findet hier meine p ORSCHLAG:

function extracting_comments($table, $fields, $condition, $order, $limit) { 
    $retVal = array(); 
    $query = "SELECT ".$fields." 
     FROM ".$table." 
     WHERE ".$condition." 
     ORDER BY ".$order." 
     LIMIT ".$limit." "; 
    if ($stmt = $this->conn->prepare($query)) { 
     $stmt->execute(); 
     $row = array_pad(array(), $stmt->field_count, ''); 
     call_user_func_array(array($stmt, 'bind_result'), $row); 
     while ($stmt->fetch()) { 
      $retVal[] = $row; 
     } 
     $stmt->close(); 
     return $retVal; 
    } 
} 
+0

Will er wirklich wissen, ob diese Variablen existieren? – Sampson

+0

Aber der Kommentar in seinem Code sagt "* aber ich will nur $ t1, $ t2, $ t3 abhängig von $ i *" zurückgeben. Und da diese Variablen nur in der 'for'-Schleife erzeugt werden, könnte er stattdessen nur die Werte speichern, die sie enthalten. – Gumbo

+0

Es war sein Kommentar "bis zu dem Punkt, an dem sie existieren", der mich verwirrte. Wie vielleicht war er bereit, 19 Iterationen zu bestehen, aber nur so weit zu gehen, wie es ihm möglich ist und immer noch an Variablen hängen bleibt, die tatsächlich existieren. Wenn also $ a1 - $ a12 existieren, wird die Schleife nur ein Maximum von $ a12 enthalten. – Sampson

0

Es wäre sauberer das Array zu bauen, wie Sie gehen, dann würden Sie nicht die temporären Variablen benötigen:

function abc($i="3") { 
    $myArray = array(); 
    for($a=1;$a<=$i;$a++) { 
    $myArray[] = "ae" . $a; // add new values to the end of the array 
    } 

    return $myArray; 
} 

Wenn Sie existieren, wenn die Variablen überprüfen möchten (und sind nicht null), verwenden Sie .

+0

Entfernen Sie die Klammer in '$ myArray()'. – Gumbo

+0

Whoops, danke. –