2016-06-10 4 views
0

내가하는 기능이 있습니다함수 내에서 foreach 루프를 사용하려면 어떻게해야합니까?

function animals($a,$b,$c,$d){ 
     $pdo = Database::connect(); 
     $sql = 'SELECT * FROM animals ORDER BY id DESC'; 
     foreach ($pdo->query($sql) as $row) { 
      echo "<td>".$a."</td>"; 
      echo "<td>".$b."</td>"; 
      echo "<td>".$c."</td>"; 
      echo "<td>".$d."</td>"; 
     } 
    } 

내 문제를 내가 매개 변수의 서로 다른 양의 기능을 여러 번 사용해야합니다. 이것은 때때로 4 개 항목 ...

animals($row['a'],$row['b'],$row['c'],$row['d'],); 

때로는 6 개 항목 ...

animals($row['e'],$row['f'],$row['g'],$row['h'],$row['i'],$row['j']); 

... 때로는 3 ...

가 ...가, 내 foreach 루프에서 의미
animals($row['k'],$row['l'],$row['m']); 

... 등등.

 $pdo = Database::connect(); 
      $sql = 'SELECT * FROM animals ORDER BY id DESC'; 

    <div> 

     <!-- Nav tabs --> 
     <ul class="nav nav-tabs" role="tablist"> 
     <li role="presentation" class="active"><a href="#home" aria-controls="home" role="tab" data-toggle="tab">Home</a></li> 
     <li role="presentation"><a href="#profile" aria-controls="profile" role="tab" data-toggle="tab">Profile</a></li> 
     <li role="presentation"><a href="#messages" aria-controls="messages" role="tab" data-toggle="tab">Messages</a></li> 
     <li role="presentation"><a href="#settings" aria-controls="settings" role="tab" data-toggle="tab">Settings</a></li> 
     </ul> 

     <!-- Tab panes --> 
     <div class="tab-content"> 
     <div role="tabpanel" class="tab-pane active" id="home"> 
<?php 
      foreach ($pdo->query($sql) as $row) { 
       echo "<td>".$a."</td>"; 
       echo "<td>".$b."</td>"; 
       echo "<td>".$c."</td>"; 
       echo "<td>".$d."</td>"; 
      } 

?> 
    </div> 
     <div role="tabpanel" class="tab-pane" id="profile"> 
<?php 
      foreach ($pdo->query($sql) as $row) { 
       echo "<td>".$row['a']."</td>"; 
       echo "<td>".$row['b']."</td>"; 
       echo "<td>".$row['c']."</td>"; 
       echo "<td>".$row['d']."</td>"; 
      } 

?> 
    </div> 
     <div role="tabpanel" class="tab-pane" id="messages"> 
<?php 
      foreach ($pdo->query($sql) as $row) { 
       echo "<td>".$row['e']."</td>"; 
       echo "<td>".$row['f']."</td>"; 
       echo "<td>".$row['g']."</td>"; 
       echo "<td>".$row['h']."</td>"; 
      } 

?> 
    </div> 
     <div role="tabpanel" class="tab-pane" id="settings"> 
<?php 
      foreach ($pdo->query($sql) as $row) { 
       echo "<td>".$row['i']."</td>"; 
       echo "<td>".$row['j']."</td>"; 
      } 

?> 
    </div> 
     </div> 

    </div> 
: 그래서 난 내 foreach는 항목의 양이 나는 기능을 사용하지 않으면 내 페이지가 다음과 같을 것이다


더 구체적으로 차이가 있음을 내 기능을 이야기하는 방법을 잘 모르겠습니다

+0

여전히 함수에서 쿼리를 실행하는 경우 인수를 전달하는 이유는 무엇입니까? –

+0

@RakeshSharma arg 란 무엇입니까? – Jarla

+0

@DsRaj 아니요, 오직 하나의 ID가 있습니다 – Jarla

답변

2

func_get_args()으로 함수 인수 배열을 가져올 수 있습니다.

function animals(){ 
    $args = func_get_args(); 

    $pdo = Database::connect(); 
    $sql = 'SELECT * FROM animals ORDER BY id DESC'; 

    foreach ($pdo->query($sql) as $row) { 
    foreach ($args as $arg_value) { 
     echo "<td>".$arg_value."</td>"; 
    } 
    } 
} 

// Call function 
animals(1, 2, 3); 
// or 
animals(1, 2, 3, 4); 

편집

내가 방금 $row에서 필드 certains 인쇄 할 추측?

function animals(){ 
    $args = func_get_args(); 

    foreach ($args as $arg_value) { 
    echo "<td>".$arg_value."</td>"; 
    } 
} 

$pdo = Database::connect(); 
$sql = 'SELECT * FROM `animals` ORDER BY id DESC'; 

foreach ($pdo->query($sql) as $row) { 
    animals($row['a'], $row['b'], $row['c']); 
    // or 
    animals($row['i'], $row['j']); 
} 

그리고 짧은 :

function animals(){ 
    $args = func_get_args(); 

    $pdo = Database::connect(); 
    $sql = 'SELECT `'.implode('`, `', $args).'` FROM `animals` ORDER BY id DESC'; 

    foreach ($pdo->query($sql) as $row) { 
    foreach ($row as $value) { 
     echo "<td>".$value."</td>"; 
    } 
    } 
} 

// Then you can just do 
animals('a', 'b', 'c'); 

// or 
animals('i', 'j'); 
+0

제안을 테스트 한 결과, 내 결과는'12312312312312312341234123412341234'입니다. 그러나 나는'1231234'을 기대했다. – Jarla

+0

나는 당신이 성취하려는 것을 따르지 않는다. 그렇다면 왜 DB 쿼리가 있습니까? DB 쿼리를 제거하면'foreach'가'1231234'가됩니다.DB의 행 때문에 두 출력을 모두 5 번 반복합니다. –

+0

혼란 스럽습니다. 데이터베이스의 결과가 필요한 경우 어떻게 데이터베이스 쿼리를 제거 할 수 있습니까? – Jarla

1

중위 이런 종류의 당신이 인수없이 함수를 만들고 PHP 함수를 func_get_args()

function animals(){ 
    $arr = func_get_args(); 
    foreach($arr as $v){ 
     // 
    } 
} 

animals(1,2,3,4,5); 
animals(1,2,3); 

Demo

+0

왜 각 vars 대신 함수의 결과 배열을 전달하지 않습니까? –

+0

가능한 대안이 될 수 있습니다. –

+0

내 데이터베이스 출력'foreach ($ pdo-> query ($ sql) $ row) {'? Rakesh Sharma와 같은 두 번째 foreach 루프를 제안 하시겠습니까? – Jarla

1
를 사용해야 할 필요가 기능을 달성하기 위해

그냥 전체 패스 $row arr 난 당신이 단지 같은 간단한

를 유지 다시 필요 함수에 쿼리하지 않는 잘못 아니에요 경우 바깥

등이 이상 함수 및 루프에
function animals($val){ 
    $pdo = Database::connect(); 
    $sql = 'SELECT * FROM animals ORDER BY id DESC'; 
    foreach ($pdo->query($sql) as $row) { 
    foreach($val as $v){ 
     echo "<td>".$v."</td>"; 
    } 
    } 
} 

그런 다음 또한 animals($row);

처럼 함수를 호출

function animals($val){ 
    foreach($val as $v){ 
     echo "<td>".$v."</td>"; 
    } 
} 
+0

귀하의 기능을 사용하려고하지만 여전히 문제가 있습니다. 나는 이것을하려고하지만 여전히 실행시킬 수 없다 :'animals ($ row [ 'a'], $ row [ 'b'], $ row [ 'c'], $ row [ 'd']) – Jarla

관련 문제