2016-06-10 35 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>"; 
     } 
    } 

我的問題是,我需要多次使用不同數量的參數,使用該功能。這意味着我的foreach循環,有時也有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 ...

animals($row['k'],$row['l'],$row['m']); 

...等等。所以,我不知道怎麼告訴我的功能,我的foreach物品的量而改變


更具體地講,如果我不使用的功能我的網頁看起來像這樣:

 $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> 
+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某些碼字段打印?

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

我沒有按照你想要達到的目標。爲什麼有數據庫查詢呢?刪除數據庫查詢和它的'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

爲什麼不傳遞一個結果數組而不是每個變量? –

+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

我正在嘗試使用你的功能,但仍然有問題。我試圖做到這一點,但仍然無法運行:'動物($ row ['a'],$ row ['b'],$ row ['c'],$ row ['d'])' – Jarla