2014-10-19 1 views
2

Хорошо. Понизьте свои стандарты n00b для этого. Вернитесь назад.Как я могу эхо-данные о каждом элементе изнутри функции?

У меня есть три файла:

  • index.php (домашняя страница)
  • project.php (шаблон страницы для каждого проекта)
  • проект-data.php (который содержит данные проекта для индекса и проекта)

У меня есть функция со списком проектов.

проект-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; 
} 
?> 

(Там на самом деле около 25 проектов, а не только три. Таким образом, мое желание автоматизировать этот материал. Но не хватает проектов, чтобы сделать меня хотят создать базу данных, с моим текущим уровнем знаний.)

И вот моя страница проекта для каждого, которая работает чудесно. URL-адреса для каждого проекта отформатированы как «project.php? Id = 3».

project.php

<?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> 

Теперь на моей странице index.php, я хотел бы повторить каждое название проекта. Как это:


Project Snoop

Проект Biggie

Тупака Project


Я пробовал цикл Еогеасп в бесчисленное количество способов, но безрезультатно.

index.php

<?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. Это кажется таким простым, но обновление каждой страницы приносит разочарование моей душе.

Заранее спасибо :)

+1

Если вы посмотрите на свою функцию здесь 'getDataForPageRender ($ id)', вы увидите, что он принимает параметр '$ id' и возвращает' array'. Надеюсь, что это поможет! – Gohn67

ответ

1

Вы с помощью $home в project-data.php, которые могут существовать в index.php, но не существует в функции getDataForPageRender.

Вы должны будете следовать DI и передать $home вместе в функции, такие как это:

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

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

/* rest of code */ 

Затем вам нужно передать $home вашей функции.

$dataForPage = getDataForPageRender($id, $home); //which you set as $home = "true"; 

Это должно получить код работает, но я хотел бы отметить, нечто, что может вызвать предупреждение, но вы можете иметь предупреждение отключено.

foreach (array(1,2,3) as &$value) { 

&$value, то & является передачей по ссылке, но так как массив является анонимным, нет никакого способа, вы можете изменить значение этого массива, просто оставить его в foreach (array(1,2,3) as $value) {, без &.

И я понятия не имею, почему вы используете getDataForPageRender(); без каких-либо параметров.

+0

Я запускал его без параметров, потому что это была только одна из итераций кода, которые я пробовал (РЕДАКТИРОВАТЬ: то, что я пытался сначала, не было так же плохо, как то, что у меня здесь, поэтому я должен был только что опубликовать это). Я думал о размещении кучи этих итераций здесь, но думал, что это может загромождать вещи, потому что они все терпят неудачу. Спасибо за ответ, я пробую это сейчас! – AnnaBlabber

+0

На самом деле, тестирование '$ home' и установка' $ id', вероятно, лучше всего сделать за пределами функции. Тогда вам просто нужно передать правильный '$ id'. Попробуйте инкапсулировать функцию таким образом, чтобы все данные проходили через аргументы и выходили как возвращаемые значения. Меньшее количество побочных эффектов означает меньшее количество ошибок. –

+0

@dave, передавая $ home функции - Конечно. Оно работает! И спасибо за подсказку & $ value -> $ value. Я неправильно истолковал учебник. Большое спасибо, чувак! :) – AnnaBlabber

1

Я не знаю, почему вы не хотите использовать БД на этом, но вы можете инициализировать массив значений по умолчанию, как это:

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> 

в index.php:

<?php 
$dataForPage = getDataForPageRender(null); // just pass a null, or an empty argument is also okay 
foreach($dataForPage as $id => $values) { 
    echo '<h1>' . $values['title'] . '</h1><br/>'; 
} 
?> 
+0

Прохладный, это выглядит как более чистое решение, чем то, что я использовал! В моем «реальном» коде (я анонимизировал/упростил его здесь), у меня на самом деле есть больше данных для каждого проекта (т. Е. «Subtitle», «Summary» и т. Д.), Поэтому я выясню, как добавить эту информацию в массив. Я не использую базу данных, потому что мне сказали, что быстрее просто включить данные в файлы здесь, а не извлекать из базы данных. Спасибо за информацию @ghost! – AnnaBlabber

+0

@AnnaBlabber, конечно, вы могли бы просто создать этот код, вы можете просто отделить эти значения по умолчанию снаружи и сделать это по-своему.есть плюсы и минусы, конечно, если вы собираетесь достигнуть тысяч записей, возможно, будет полезно использовать таблицы на этом, но если его просто сотни, то массивы будут делать все отлично. Я рад, что это помогло – Ghost

1

@AnnaBlabber, я хотел бы рекомендовать вам использовать Объектно-ориентированный подход

  • Создайте класс, как Project
  • объявить свойства, такие как идентификатор проекта, название и т.д.
  • Объявите массив, содержащий экземпляры класса Project.

Позже вы можете выполнять итерацию по массиву, визуализировать ссылку, используя извлеченный элемент. Для получения дополнительной информации о знании основ занятий вы можете посетить here. Это, несомненно, поможет вам избавиться от структуры if/else, а также сделает ваш код более чистым.