Php 如何从函数内部回显有关每个项的数据?

Php 如何从函数内部回显有关每个项的数据?,php,html,arrays,loops,foreach,Php,Html,Arrays,Loops,Foreach,好的。降低这一款的n00b标准。现在往回走 我有三个文件: index.php(主页) project.php(每个项目的模板页) project data.php(它保存索引和项目的项目数据) 我有一个带有项目列表的函数 project data.php <?php function getDataForPageRender($id) { if (empty($home)) { $id = $_GET["id"]; } $returnArray = arra

好的。降低这一款的n00b标准。现在往回走

我有三个文件:

  • index.php(主页)
  • project.php(每个项目的模板页)
  • project data.php(它保存索引和项目的项目数据)
我有一个带有项目列表的函数

project data.php

<?php

function getDataForPageRender($id)
{

  if (empty($home)) {
    $id = $_GET["id"];
  }

  $returnArray = array();
  if($id == 1)
  {  
    $returnArray['title'] = 'Project Snoop';
  } else if($id == 2)
  {  
    $returnArray['title'] = 'Project Biggie';
  } else if($id ==3)
  {  
    $returnArray['title'] = 'Project Tupac';
  }
    return $returnArray;
}
?>
<?php
include 'project-data.php';
$dataForPage = getDataForPageRender($id);
$id = $_GET["id"];
$title = $dataForPage['title'];
?>
<html>
<head></head>
<body>
  <h1><?php echo $title; ?></h1>
</body>
</html>
<?php
include 'project-data.php';
foreach (array(1,2,3) as &$value) {

  $home = "true"; // I know, ghetto. I'm trying lots of different things quickly.
  $id = $value;
  getDataForPageRender();
  $dataForPage = getDataForPageRender($id);
  echo $dataForPage['title'];
  echo "<br>";
}
?>

(实际上大约有25个项目,而不仅仅是三个。因此,我迫切希望自动化这些东西。但没有足够的项目让我想用我目前的知识水平创建一个数据库。)

这是我的每一个项目页面,它工作得非常好。每个项目的URL格式为“project.php?id=3”

project.php

<?php

function getDataForPageRender($id)
{

  if (empty($home)) {
    $id = $_GET["id"];
  }

  $returnArray = array();
  if($id == 1)
  {  
    $returnArray['title'] = 'Project Snoop';
  } else if($id == 2)
  {  
    $returnArray['title'] = 'Project Biggie';
  } else if($id ==3)
  {  
    $returnArray['title'] = 'Project Tupac';
  }
    return $returnArray;
}
?>
<?php
include 'project-data.php';
$dataForPage = getDataForPageRender($id);
$id = $_GET["id"];
$title = $dataForPage['title'];
?>
<html>
<head></head>
<body>
  <h1><?php echo $title; ?></h1>
</body>
</html>
<?php
include 'project-data.php';
foreach (array(1,2,3) as &$value) {

  $home = "true"; // I know, ghetto. I'm trying lots of different things quickly.
  $id = $value;
  getDataForPageRender();
  $dataForPage = getDataForPageRender($id);
  echo $dataForPage['title'];
  echo "<br>";
}
?>

现在,在我的index.php页面上,我想回显每个项目的标题。像这样:


窥探计划

大人物计划

图帕克项目


我用无数种方法尝试了foreach循环,但都没有成功

index.php

<?php

function getDataForPageRender($id)
{

  if (empty($home)) {
    $id = $_GET["id"];
  }

  $returnArray = array();
  if($id == 1)
  {  
    $returnArray['title'] = 'Project Snoop';
  } else if($id == 2)
  {  
    $returnArray['title'] = 'Project Biggie';
  } else if($id ==3)
  {  
    $returnArray['title'] = 'Project Tupac';
  }
    return $returnArray;
}
?>
<?php
include 'project-data.php';
$dataForPage = getDataForPageRender($id);
$id = $_GET["id"];
$title = $dataForPage['title'];
?>
<html>
<head></head>
<body>
  <h1><?php echo $title; ?></h1>
</body>
</html>
<?php
include 'project-data.php';
foreach (array(1,2,3) as &$value) {

  $home = "true"; // I know, ghetto. I'm trying lots of different things quickly.
  $id = $value;
  getDataForPageRender();
  $dataForPage = getDataForPageRender($id);
  echo $dataForPage['title'];
  echo "<br>";
}
?>

您正在
项目数据.php
中使用
$home
,它可能存在于
index.php
中,但不存在于函数
getDataForPageRender

您需要遵循DI并将
$home
传递到如下函数:

function getDataForPageRender($id, $home) //<-- added home
{

  if (empty($home)) {
    $id = $_GET["id"];
  }

 /* rest of code */
这应该可以让你的代码运行,但我想指出一些可能导致警告的事情,但是你可能会禁用警告

foreach (array(1,2,3) as &$value) {
&$value
,&是通过引用传递的,但是由于数组是匿名的,您无法更改该数组的值,只需将它放在
foreach(数组(1,2,3)as$value){
,而不带
&


我不知道您为什么在没有任何参数的情况下运行
getDataForPageRender();

我不知道您为什么不想在这台计算机上使用DB,但您可以初始化一个默认值数组,如下所示:

function getDataForPageRender($id = null) {

    $default_values = array(
        1 => array('title' => 'Project Snoop'),
        2 => array('title' => 'Project Biggie'),
        3 => array('title' => 'Project Tupac'),
    );
    // either you pass an id which gives a specific entry, or show all results
    return isset($default_values[$id]) ? $default_values[$id] : $default_values;
}
所以在
project.php?id=3
中:

<?php
include 'project-data.php';
$id = $_GET["id"]; // this comes first
$dataForPage = getDataForPageRender($id); // set an ID to get specific entry
$title = $dataForPage['title'];
?>

<html>
<head></head>
<body>
  <h1><?php echo $title; ?></h1>
</body>
</html>

@Annababber,我建议您使用面向对象的方法

  • 创建一个名为
    Project
  • 声明项目id、标题等属性
  • 声明包含
    项目
    类实例的数组
稍后,您可以迭代数组,使用检索到的元素呈现链接。
这肯定会帮助您摆脱if/else结构,并使代码更干净。

如果您在此处查看函数
getDataForPageRender($id)
,您将看到它接受一个
$id
参数,并返回一个
数组
。希望这些提示有帮助!我运行它时没有参数,因为这只是我尝试的代码迭代之一(编辑:我最初尝试的并没有我在这里看到的那么糟糕,所以我应该刚刚发布)。我想在这里发布一系列迭代,但认为可能会使事情变得混乱,因为它们都失败了。谢谢你的回答,我现在正在尝试!实际上,测试
$home
和设置
$id
可能最好在函数之外完成。然后你只需要传入正确的
$id
。T请尝试封装函数,使所有数据都通过参数输入并作为返回值输出。副作用越少,错误就越少。@dave,将$home传递给函数——当然可以。这很有效!感谢&$value->$value提示。我误解了教程。非常感谢,伙计!:)很酷,这看起来是一个更干净的解决方案在我的“真实”代码(我在这里匿名/简化了它)中,我实际上有更多的每个项目的数据(即“字幕”、“摘要”等)因此,我将找出如何将该信息添加到数组中。我没有使用数据库,因为我被告知,将数据包含在文件中而不是从数据库中检索会更快。感谢info@ghost!@AnnaBlabber!当然,您可以在这段代码的基础上进行构建,您可以将这些默认值从外部分离出来,对吗当然,如果你要达到数千个条目,在这个条目上使用表可能是可行的,但是如果只有数百个,那么数组就可以了。我很高兴这有帮助