在php中显示数组中的数据部分

时间:2014-11-18 19:29:29

标签: php mysql arrays

我有一个连接到数据库的系统,用于检索文章表中的前5个(按日期)结果。这将拉出结果并将其与详细信息ID,标题,摘要和内容一起存储。所以5个结果有4条信息。

index.php然后应该包含这些信息并显示到home.html.php ...我的问题是,当我这样做时,我得到多行相同的数据。我试图让它显示最新的文章作为主要功能,然后其他人作为页面上的子新闻。

的index.php

try{
                    $sql = 'SELECT * FROM `articles` ORDER BY publicationDate DESC LIMIT 0,5';
                    $result = $pdo->query($sql);


                }

            catch (PDOException $e){
                $error = 'Error fetching jokes: ' . $e->getMessage();
                include 'error.html.php';
                exit();
                }

            foreach ($result as $row){
                $articles[] = array(
                'id' => $row['id'], 
                'title' => $row['title'],
                'summary' => $row['summary'],
                'content' => $row['content']);

                }

            include '/templates/ui/home.html.php';

home.html.php

<div class="jumbotron">
  <div class="container">
  <?php foreach ($articles as $article):?>
    <h1><?php htmlout($article['title'] ); ?></h1>
    <p><?php htmlout($article['summary'] );?></p>
    <p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more &raquo;</a></p>
  </div>
</div>

<div class="container">
  <!-- Example row of columns -->
  <div class="row">
    <div class="col-md-4">
      <h2><?php htmlout($article['title'] ); ?></h2>
      <p><?php htmlout($article['summary'] );?> </p>
      <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p>
    </div>
    <div class="col-md-4">
      <h2><?php htmlout($article['title'] ); ?></h2>
      <p><?php htmlout($article['summary'] );?> </p>
      <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p>
   </div>
    <div class="col-md-4">
      <h2><?php htmlout($article['title'] ); ?></h2>
      <p><?php htmlout($article['summary'] );?></p>
      <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p>

    </div>
    <?php endforeach; ?>
  </div>

我希望有足够的信息,只是想知道我如何能够提取我需要的数组部分,以便每个条目都不同。

提前致谢

5 个答案:

答案 0 :(得分:1)

基本上,您可以通过索引访问数组元素。删除foreach并使用$articles[0]作为主文章,$articles[1]等等。其余部分。

您可以使用array_slice功能改进代码以提取子新闻并使用foreach来避免重复每个代码。

答案 1 :(得分:1)

有十几种方法可以做到这一点。我会使用array_shift并从数组中获取第一篇文章。然后将foreach循环向下移动到您拥有class =&#34; col-md-4&#34; divs,a la

<div class="jumbotron">
  <div class="container">
  <?php $firstArticle = array_shift($articles); // this takes the first one off the array ?>
    <h1><?php htmlout($firstArticle['title'] ); ?></h1>
    <p><?php htmlout($firstArticle['summary'] );?></p>
    <p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more &raquo;</a></p>
  </div>
</div>

<div class="container">
  <div class="row">
    <?php 
    // the remaining four articles can be accessed with the foreach
    foreach ($articles as $article):?>
    <div class="col-md-4">
      <h2><?php htmlout($article['title'] ); ?></h2>
      <p><?php htmlout($article['summary'] );?> </p>
      <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p>
    </div>
    <?php endforeach; ?>
  </div>
</div>

如果你注意到,你不必重复循环内的html。循环为你重复它。

答案 2 :(得分:0)

我会调试这部分代码,以确保您获得了您期望的内容,在循环之前对$ result执行print_r或var_dump。在测试之后放一个exit(),这样在调试时它就不会执行代码的任何其他部分:

    foreach ($result as $row){
        $articles[] = array(
        'id' => $row['id'], 
        'title' => $row['title'],
        'summary' => $row['summary'],
        'content' => $row['content']);

        }

您对该模板的宣读看起来不错。我很好奇为什么你要获得相同数据的线条。

清单:

  • 您是否检查过数据库以确保数据在那里?

  • 为什么你之前没有$result->fetchAll(PDO::FETCH_ASSOC); foreach循环?

答案 3 :(得分:0)

为什么你不在index.php中这样做?

通过这种方式,您可以避免创建数组数组。

<?php 
try{
    $sql = 'SELECT * FROM `articles` ORDER BY publicationDate DESC LIMIT 0,5';
    $result = $pdo->query($sql);
} catch (PDOException $e){
    $error = 'Error fetching jokes: ' . $e->getMessage();
}
?>
<div class="jumbotron">
    <div class="container">
    <?php 
        while($row = $result->fetch_array(MYSQLI_ASSOC)) {
    ?>
    <h1><?php echo $row['id']; ?></h1>
    <p><?php echo $row['summary']; ?></p>
    <p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more &raquo;</a></p>
  </div>
</div>

<div class="container">
    <!-- Example row of columns -->
    <div class="row">
        <div class="col-md-4">
            <h2><?php echo $row['title']; ?></h2>
            <p><?php echo $row['summary']; ?> </p>
            <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p>
        </div>
        <div class="col-md-4">
            <h2><?php echo $row['title']; ?></h2>
            <p><?php echo $row['summary']; ?> </p>
            <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p>
        </div>
        <div class="col-md-4">
            <h2><?php echo $row['title']; ?></h2>
            <p><?php echo $row['summary']; ?></p>
            <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p>
        </div>
    </div>
    <?php
        }
    ?>
</div>

答案 4 :(得分:0)

要停止回显重复项,您可以根据<div>的键添加$articles包装器:

   <?php
    // Loop through articles
    foreach ($articles as $key => $article) {
        // If first place, insert jumbotron class & container class
        if($key == 0) { ?>
    <div class="jumbotron">
        <div class="container">
        <?php }
        // Not 1st, just add rows
        else { 
                // If second place, add container class
                if($key == 1) { ?><div class="container"><?php } ?>
    <div class="row">
        <div class="col-md-4">
        <?php } ?>
            <h1><?php htmlout($article['title'] ); ?></h1>
            <p><?php htmlout($article['summary'] );?></p>
            <p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more &raquo;</a></p>
        </div>
    </div>
      <?php
      // If last place, add container class end
      if($key == 4) { ?></div><?php }
   }; ?>