【问题标题】:PHP foreach not looping through nested arrayPHP foreach 没有遍历嵌套数组
【发布时间】:2019-12-01 08:53:34
【问题描述】:

我首先要说我是 PHP 新手,但设法将这个贯穿数组的 foreach 循环破解在一起,但没有显示任何内容,并且我收到一条错误消息,提示“为 foreach() 提供的参数无效'。

这个想法是它应该随机显示 3 个项目而不重复它们,如果页面 URL 与 project_url 变量匹配,则不会显示该特定项目。

尝试搜索类似的问题,但据我所知,我似乎无法找到任何适合我的情况。非常感谢任何帮助!

<?php

$recent_projects = array(
        array(
            project_img         => 'assets/img.jpg',
            project_title       => 'Project Name',
            project_cat         => 'Project Category',
            project_url         => 'project-name',
            project_alttag      => 'Project Name',
            project_titletag    => 'Project name',
            project_nofollow    => 'follow'
        ),
        array(
            project_img         => 'assets/img.jpg',
            project_title       => 'Project Name',
            project_cat         => 'Project Category',
            project_url         => 'project-name',
            project_alttag      => 'Project Name',
            project_titletag    => 'Project name',
            project_nofollow    => 'follow'
        ),
        array(
            project_img         => 'assets/img.jpg',
            project_title       => 'Project Name',
            project_cat         => 'Project Category',
            project_url         => 'project-name',
            project_alttag      => 'Project Name',
            project_titletag    => 'Project name',
            project_nofollow    => 'follow'
        ),
        array(
            project_img         => 'assets/img.jpg',
            project_title       => 'Project Name',
            project_cat         => 'Project Category',
            project_url         => 'project-name',
            project_alttag      => 'Project Name',
            project_titletag    => 'Project name',
            project_nofollow    => 'follow'
        )
    );

    $show_x_projects  = 3; // How may projects to show
    $i                = 0;
    $current_page     = trim($_SERVER['REQUEST_URI'], '/');
    $random_projects  = array_rand($recent_projects);

?>
      <?php foreach($random_projects as $recent_projects):
        $item = (object)$recent_projects;
        if($current_page == $item->project_url) continue;
        $i++;
        if($i >= $show_x_projects) continue; ?>


          <div class="col-sm-12 col-md-4">
            <figure>
              <img class="img-fluid" src="<?php echo $item->project_img; ?>" alt="<?php echo $item->project_alttag; ?>" title="<?php echo $item->project_titletag; ?>">
              <figcaption>
                  <h4><span><?php echo $item->project_title; ?></span></h4>
                  <p><?php echo $item->project_cat; ?></p>
                  <a href="<?php echo $item->project_url; ?>" rel="<?php echo $item->project_nofollow; ?>"></a>
                  <p class="view-project-link">View Project →</p>
              </figcaption>
            </figure>
          </div>

      <?php endforeach; ?>

【问题讨论】:

  • 您尝试过什么调试问题?将页面 URL 与项目 URL 进行比较的代码在哪里?
  • array_rand($recent_pProjects, 3);$recent_projects,而不是 $recent_pProjects。另外,在数组键周围添加引号
  • 请先启用适当的 PHP 错误报告功能 - 然后 PHP 有机会告诉您类似的事情本身。
  • @kerbholz 我不小心粘贴了错误的代码 sn-p,我已经更新了但这不是问题。

标签: php html arrays foreach


【解决方案1】:

我在这里添加了逻辑来过滤掉与页面具有相同 URL 的项目。然后随机选择3个项目进行展示。这是演示link

$recent_projects = [
    [
        'project_title'       => 'Project Name1',
        'project_url'         => 'url1'
    ],
    [
        'project_title'       => 'Project Name2',
        'project_url'         => 'url2'
    ],
    [
        'project_title'       => 'Project Name3',
        'project_url'         => 'url3'
    ],
    [
        'project_title'       => 'Project Name4',
        'project_url'         => 'url4'
    ],
    [
        'project_title'       => 'Project Name5',
        'project_url'         => 'url5'
    ]
];
$show_x_projects  = 3; // How may projects to show
$current_page     = trim($_SERVER['REQUEST_URI'], '/');

// remove the project which matches with page url
$filtered_projects = array_filter($recent_projects, function ($project) use ($current_page) {
    return ($project['project_url'] != $current_page);
});

// select random 3 project from filtered projects
$random_projects  = array_rand($filtered_projects, $show_x_projects);

foreach ($random_projects as $index) {
    $item = $filtered_projects[$index];
    echo $item['project_title']; // replace this with hrml code
}

问题中给出的代码有几个问题

  • 变量$recent_pProjects 中的拼写错误
  • 没有 URL 检查代码
  • 未使用的变量

【讨论】:

  • 抱歉@vinay 只是我意识到我粘贴了错误的 sn-p,我已经更新了我的原始帖子。会尝试你的代码,看看我是怎么走的。谢谢
  • @DylanMcleod 我可以看到更新的代码,这里有一些逻辑问题。您首先选择随机的三个项目,然后检查所选随机项目的 URL 条件,这可能会为您提供少于 3 个的项目列表。我已经修改了这个逻辑,希望这能解决问题。
【解决方案2】:

首先...您的数组应如下所示:

<?php

    $recent_projects = [
            [
                'project_img'         => 'assets/img.jpg',
                'project_title'       => 'Project Name',
                'project_cat'         => 'Project Category',
                'project_url'         => 'project-name',
                'project_alttag'      => 'Project Name',
                'project_titletag'    => 'Project name',
                'project_nofollow'    => 'follow'
            ],
            [
                'project_img'         => 'assets/img.jpg',
                'project_title'       => 'Project Name',
                'project_cat'         => 'Project Category',
                'project_url'         => 'project-name',
                'project_alttag'      => 'Project Name',
                'project_titletag'    => 'Project name',
                'project_nofollow'    => 'follow'
            ],
            [
                'project_img'         => 'assets/img.jpg',
                'project_title'       => 'Project Name',
                'project_cat'         => 'Project Category',
                'project_url'         => 'project-name',
                'project_alttag'      => 'Project Name',
                'project_titletag'    => 'Project name',
                'project_nofollow'    => 'follow'
            ],
            [
                'project_img'         => 'assets/img.jpg',
                'project_title'       => 'Project Name',
                'project_cat'         => 'Project Category',
                'project_url'         => 'project-name',
                'project_alttag'      => 'Project Name',
                'project_titletag'    => 'Project name',
                'project_nofollow'    => 'follow'
            ]
        ];

        $show_x_projects  = 3; // How may projects to show
        $i                = 0;
        $current_page     = trim($_SERVER['REQUEST_URI'], '/');
        $random_keys= array_rand($recent_projects,3);

    ?>

比循环部分:

<?php
    foreach($random_keys as $key): ?>
            <?php $project = $recent_projects[$key];?>
          <div class="col-sm-12 col-md-4">
            <figure>
              <img class="img-fluid" src="<?php echo $project["project_img"]; ?>" alt="<?php echo $project["project_alttag"]; ?>" title="<?php echo $project["project_titletag"]; ?>">
              <p></p>
              <figcaption>
                  <h4><span><?php echo $project["project_title"]; ?></span></h4>
                  <p><?php echo $project["project_cat"]; ?></p>
                  <a href="<?php echo $project["project_url"]; ?>" rel="<?php echo $project["project_nofollow"]; ?>"></a>
                  <p class="view-project-link">View Project →</p>
              </figcaption>
            </figure>
          </div>

      <?php endforeach; ?>

Working php fiddle

【讨论】:

    【解决方案3】:

    请用以下代码替换您的代码:

    <!DOCTYPE html>
    <html>
        <head>
        </head>
        <body>
            <?php
            $recent_projects = array(
                array(
                    'project_img' => 'assets/img.jpg',
                    'project_title' => 'Project Name',
                    'project_cat' => 'Project Category',
                    'project_url' => 'project-name',
                    'project_alttag' => 'Project Name',
                    'project_titletag' => 'Project name',
                    'project_nofollow' => 'follow'
                ),
                array(
                    'project_img' => 'assets/img.jpg',
                    'project_title' => 'Project Name',
                    'project_cat' => 'Project Category',
                    'project_url' => 'project-name',
                    'project_alttag' => 'Project Name',
                    'project_titletag' => 'Project name',
                    'project_nofollow' => 'follow'
                ),
                array(
                    'project_img' => 'assets/img.jpg',
                    'project_title' => 'Project Name',
                    'project_cat' => 'Project Category',
                    'project_url' => 'project-name',
                    'project_alttag' => 'Project Name',
                    'project_titletag' => 'Project name',
                    'project_nofollow' => 'follow'
                ),
                array(
                    'project_img' => 'assets/img.jpg',
                    'project_title' => 'Project Name',
                    'project_cat' => 'Project Category',
                    'project_url' => 'project-name',
                    'project_alttag' => 'Project Name',
                    'project_titletag' => 'Project name',
                    'project_nofollow' => 'follow'
                )
            );
    
            $show_x_projects = 3; // How may projects to show
            $i = 0;
            $current_page = trim($_SERVER['REQUEST_URI'], '/');
            $random_projects = array_rand($recent_projects);
            ?>
            <?php $random_projects = array_rand($recent_projects, 3);
            foreach ($random_projects as $index): 
                $item = $recent_projects[$index];
                ?>
    
                <div class="col-sm-12 col-md-4">
                    <figure>
                        <img class="img-fluid" src="<?php echo $item['project_img']; ?>" alt="<?php echo $item['project_alttag']; ?>" title="<?php echo $item['project_titletag']; ?>">
                        <p></p>
                        <figcaption>
                            <h4><span><?php echo $item['project_title']; ?></span></h4>
                            <p><?php echo $item['project_cat']; ?></p>
                            <a href="<?php echo $item['project_url']; ?>" rel="<?php echo $item['project_nofollow']; ?>"></a>
                            <p class="view-project-link">View Project →</p>
                        </figcaption>
                    </figure>
                </div>
    
    <?php endforeach; ?>
        </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 2017-05-13
      相关资源
      最近更新 更多