Несколько для циклов - как печатать данные - PullRequest
1 голос
/ 07 февраля 2012

Я хочу сделать сайт чем-то вроде popurls.com, но я буду использовать статические данные, хранящиеся в базе данных MySQL. Кстати, я использую php / mysql.
В каждом списке я хочу показать около 10 ссылок (так же, как на popurls). В этом случае, если у меня будет 20 списков, мне нужно будет сделать 20 циклов for (для каждого конкретного списка).
Мой вопрос Есть ли лучший способ напечатать эти 20 списков вместо использования 20 циклов for в php.

Ответы [ 6 ]

0 голосов
/ 07 февраля 2012
Цикл

a for или цикл foreach будут работать нормально, но кодирование будет намного меньше, если вы просто создадите один цикл for и поместите содержимое в массив массивов или массив строк ...затем вы можете делать с фактическим содержимым все, что захотите (при условии, что мы группируем по столбцу category. Я буду использовать пример, в котором используется массив строк (и запрос, на который я ссылаюсь, объясняется здесь: http://explainextended.com/2009/03/06/advanced-row-sampling/)

$query = mysql_query([QUERY THAT GETS ALL ITEMS, BUT LIMITS BY EACH CATEGORY]) or die(mysql_error());
$all_items = array();
while($row=mysql_fetch_array($query)){
   if (!isset($all_items[$row['category']])){ //if it isn't created yet, make it an empty string
       $all_items[$row['category']] = "";
   }
   $all_items[$row['category']] .= "<li><a href='".$row['url']."'>".$row['title]."</a></li>"; //concatinate the new item to this list
}

Теперь у нас есть массив, в котором блок HTML для каждого раздела хранится в массиве с именем категории. Чтобы вывести каждый блок, просто:

echo  $all_items['category name'];
0 голосов
/ 07 февраля 2012

Просто храните ваши ссылки в двухмерном массиве.Таким образом, вы должны будете сделать 1 внешний цикл (перебирая списки) и 1 внутренний цикл перебирая ссылки в определенном списке.

$links = array(
  'science' => array('link1', 'link2', ...),
  'sports' => array('link1', 'link2'),
  // ... and so on
);
foreach ($links as $category => $urls) {
  echo "Links in category: $category\n";
  foreach ($urls as $url) {
    echo $url . "\n";
  }
}
0 голосов
/ 07 февраля 2012

Вы можете получить всю информацию из базы данных и разобрать ее в массив, например,

array[<news type1>] = array( link1, link2, link3, etc);
array[<news type2>] = array( link1, link2, link3, etc);

и т. Д.

, а в макете вы можете использовать

foreach ($newsCategory AS $categoryLinks) {
  foreach ($categoryLinks AS $newsLink) {
       <show the link and / or extra data>
  }
}
0 голосов
/ 07 февраля 2012

Вам просто нужно два цикла foreach.Предполагая, что вы берете данные из таблицы MySQL (как вы написали), это может быть так:

$list_query = mysql_query("SELECT * FROM lists";)

while( $list = mysql_fetch_array($list_query) )
{
    echo "<h1>{$list['title']}</h1>";

    $query = mysql_query("SELECT * FROM entries WHERE list_id = {$list['id']}");

    while( $entry = mysql_fetch_array($query) )
    {
        echo "- {$entry['name']}<br />";
    }
}
0 голосов
/ 07 февраля 2012

Много зависит от вашего ввода данных, но я мог бы представить что-то вроде этого:

<?php


$lists = arrray('list1', 'list2', 'list3');

foreach ($lists as $current) {
    $data = fetch_data_from_mysql($current);
    foreach ($data as $link) {
        echo "<a href=\"$data\">Link</a>";
    }
}

function fetch_data_from_mysql($current)
{
   $list_data = array();

   // do whatever is required to fetch the list data for item $current from MySQL
   // and store the data in $list_data

   return $list_data;
}
0 голосов
/ 07 февраля 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...