2009-07-06 3 views
0

Я хочу вернуть набор значений из функции до момента они существуют .... , например ....PHP - функция возврата значения динамически

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 
} 

Спасибо ....

@therefromhere Я также создание массива в цикле, я вставить исходный код, так что вы можете понять это лучший способ

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(); 
     } 

    } 

теперь их только 5 строк данных, поэтому их нет смысла возвращения $ t6, $ t7, $ t8, $ t9, $ t10 и я хочу, чтобы это исправить, и я вызываю функцию, используя

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

пожалуйста, помогите. ..thanks

ответ

1

Я считаю, что это поможет вам. У вас очень сложный код с множеством побочных эффектов и ошибок, лучше подумать о том, чтобы перерисовать его. Также размещение операторов после возврата не будет иметь никакого эффекта, так как оно не будет вызываться.

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

спасибо много ...... artem barger проблема решена навсегда – halocursed

+0

эй Артем .... теперь я изменил свой код в соотв. к вашему ответу, теперь это ошибка, или их лучше сделать это .... если так, пожалуйста, укажите мне в правильном направлении ... Надеюсь, вы знаете, что я пытаюсь с помощью этой функции. – halocursed

+0

Чтобы быть честным, Я не совсем уверен, что именно вы пытаетесь сделать здесь. Но похоже, что вы создали много избыточного кода. Вероятно, стоит потратить некоторое время на чтение сайта http://php.net, чтобы лучше понять, что вы здесь используете. –

10

Просто построить массив в вашем for цикле:

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

После того, как вы отредактировали вопрос показал нам действительную проблему, смотрите здесь мой р roposal:

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

Действительно ли он хочет знать, существуют ли эти переменные? – Sampson

+0

Но комментарий в его коде говорит «*, но я хочу только вернуть $ t1, $ t2, $ t3 в зависимости от $ i *". И поскольку эти переменные только создаются в цикле 'for', он может просто сохранить значения, которые они содержат. – Gumbo

+0

Это был его комментарий «до тех пор, пока они существуют», что смутило меня. Как, может быть, он был готов пройти 19 итераций, но хочет только дойти до того, насколько смог и по-прежнему привязан к существующим переменным. Поэтому, если существует $ a1 - $ a12, цикл будет включать максимум $ a12. – Sampson

0

Было бы чище, чтобы построить массив, как вы идете вместе, то вы бы не нужны временные переменные:

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; 
} 

Если вы хотите, чтобы проверить, существуют ли переменные (и не являются нулевыми), используйте isset().

+0

Удалите скобки в '$ myArray()'. – Gumbo

+0

Упс, спасибо. –

Смежные вопросы