2015-04-22 1 views
1

У меня есть код здесь, который у меня есть чувство, можно сделать гораздо более эффективным. Я создаю базу данных каталога библиотек, и я ищу способ хранения нескольких столбцов (с несколькими записями), извлеченных из базы данных SQL, в один массив PHP. Это означало бы, что только один цикл foreach будет необходим в коде «view», чтобы распечатать результаты и сохранить их в таблице. У кого-нибудь из вас есть полезные идеи? :)PHP foreach выводит все четыре раза (mysql, sql, администрирование базы данных)

Мой код в его текущем состоянии ниже:

MODEL CODE: 

$matches["loandates"] = array(); 
     $matches["loanduedates"] = array(); 
     $matches["itemnames"] = array(); 
     $matches["itemauthors"] = array(); 

     try { // if we do find an item, then we run this query against the database to get a list of all the current loans. 
      $results = $db->prepare(" 
       SELECT il.loan_date, il.loan_duedate, i.item_name, i.item_author 
       FROM itemloan il 
       INNER JOIN libraryitem li 
       ON il.libraryItem_id = li.libraryItem_id 
       INNER JOIN item i 
       ON li.item_id = i.item_id 
       WHERE il.user_id = ? 
       ORDER BY il.loan_date asc 
        "); 
      $results->bindParam(1,$userid); // puts user id value where the placeholder is. First value is character of placeholder, second value is variable we want to bind to placeholder). 
      $results->execute(); 
      } catch (Exception $e) { 
       echo "Data could not be retrieved from the database."; 
       exit; 
      } 

      while ($row = $results->fetch(PDO::FETCH_ASSOC)) { // we loop through the loans one at a time, and add them to our matches variable 
       $matches["loandates"][] = $row["loan_date"]; 

       $matches["loanduedates"][] = $row["loan_duedate"]; 

       $matches["itemnames"][] = $row["item_name"]; 

       $matches["itemauthors"][] = $row["item_author"]; 

      } 

      return $matches;     
    } 

VIEW КОД:

<table id="name"> 

        <?php 
            foreach($user["itemnames"] as $itemname) { 

              echo "<tr><td id='radiocell'><input type='radio' name='libraryitemid' id='radio'></td><td class='user'>" . $itemname . "</td></tr>"; 
              } 
        ?> 

       </table> 

       <table id="author"> 
        <?php 

            foreach($user["itemauthors"] as $itemauthor) { 

              echo "<tr><td class='user'>" . $itemauthor . "</td></tr>"; 

              } 
          ?> 

       </table> 

       <table id="date"> 
        <?php 



            foreach($user["loandates"] as $loandate) { 

              $time = strtotime($loandate); 
              $myFormatForView = date("l d F Y", $time); 

              echo "<tr><td class='user'>" . $myFormatForView . "</td></tr>"; 

              } 
          ?> 

       </table> 

       <table id="duedate"> 
        <?php 

            foreach($user["loanduedates"] as $loanduedate) { 

              $time = strtotime($loanduedate); 
              $myFormatForView = date("l d F Y", $time); 

              echo "<tr><td class='user'>" . $myFormatForView . "</td></tr>"; 

              } 
          ?> 

       </table> 

я в конечном счете хочу только одна таблица с одной Еогеасп цикла, а не четыре таблицы с четырьмя Foreach петлями , Если ты получишь мой смысл.

Я был бы очень благодарен, если бы кто-нибудь мог помочь! Спасибо за кучи заранее!

С уважением,

Роберт, Лондон, Великобритания

+0

P.S. результаты выбора базы данных (в коде модели) были сохранены в переменной с именем $ user. –

ответ

0
$matches[] = array("loandates" => $row["loan_date"], 
       "loanduedates" => $row["loan_duedate"], 
       "itemnames" => $row["item_name"], 
       "itemauthors" => $row["item_author"]); 

Теперь у вас есть один массив, и вы можете отобразить его с одним Еогеаспом.

foreach($matches as $match) { 
    echo $match['loandates'] . '</td><td>' . $match['loan_duedate'] ... 
0
while ($row = $results->fetch(PDO::FETCH_ASSOC)) { // we loop through the loans one at a time, and add them to our matches variable 
    $matches[] = $row; 
} 

И потом:

<table id="name"> 

<?php 
    foreach($user as $key=>$values) { 
     echo '<tr>'; 
     foreach($values as $itemname) { 
     //echo <td> with data 
     } 
     echo '</tr>'; 
    } 

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