PHP foreach подкатегории проблемы - PullRequest
0 голосов
/ 13 февраля 2011

У меня проблемы с созданием сценария, в котором продукты с определенной подкатегорией необходимо печатать в определенном DIV.На данный момент я извлекаю все данные, которые мне нужны, но что происходит в данный момент, если, например, у меня есть 4 категории, это создает DIV 4 раза, но продукты в DIV все одинаковы, но мне нужно, чтобы они были конкретными длясоответствующая категория, надеюсь, что имеет смысл.Это то, что я до сих пор:

<code>$categories = getCategories();

        foreach($categories as $category)
        {
        echo '<div class="panel">
            <div class="panel-wrapper"><pre>';
            echo print_r(getProducts($category['id_category']));
            echo '
ФФ ';echo ' ';}

$ Categories = array ('1', '2', '3');Продукты обрабатываются таким образом

$i = 0;
while ($row = mysql_fetch_assoc($result)) 
{
    $products[$i] = $row;
    $i++;
}
return  $products;

Что возвращает:

Array
(
    [0] => Array
        (
            [title] => Hat
            [description] =>nice description
            [visible] => 1
            [date-added] => 2011-02-10 20:02:02
            [date-updated] => 0000-00-00 00:00:00
            [price] => 10
            [id_category] => 2
        )
     [1] => Array etc etc etc 
 )

Я новичок в php, поэтому я не знаю, как запустить этот цикл без foreach, гдеЯ думаю, что я иду не так.

Заранее спасибо!

1 Ответ

1 голос
/ 13 февраля 2011

Прежде всего, я хотел бы отметить, что категории и подкатегории должны находиться в одной таблице БД, а подкатегории должны быть помечены полем (например, subcategory_of) и должны быть связаны с идентификатором категории.Таким образом, у нас нет путаницы идентификаторов, потому что продукты могут быть в обеих категориях ИЛИ подкатегориях.

Инициализировать общий массив, который будет идти $array['category']['subcategory']['product_id'], или в некоторых случаях продукты могут непосредственно находиться вкатегория без классификации подкатегории. Вам не нужно этого делать, вы можете просто распечатать выходные данные, не сохраняя их в массиве.

Запускать их, начиная с категорий, для каждой категории:

  1. Проверьте, есть ли у категории подкатегории, если она есть, получите продукты в этой подкатегории.
  2. Проверьте, есть ли какие-либо продукты в этой категории.

Так что у вас будетбудет выглядеть примерно так:

$cat = 0;
$categories = getCategories();

foreach ($categories as $category) {
    // If you want to print something about the category, do it here.
    $subcategories = getSubcategories($category_id);

    $subcat = 0;
    foreach ($subcategories as $subcategory) {
        $products = getProducts($category_id_for_subcategory) // see note 1

        foreach ($products as $product) {
            // This product is under a subcategory. Do what you want here.
            $array[$cat][$subcat++][] = $product; // or echo the product...
        }
     }

     $products = getProducts($category_id);
     foreach ($products as $product) {
         // This product is under a general category, and not a subcategory.
         // Do what you want to do with this product here.
         $array[$cat++][] = $product; // or echo the product.
     }
}

Примечание 1: Каждая подкатегория также считается категорией, поэтому здесь мы будем использовать идентификаторы категорий подкатегорий.Однако, когда мы получаем подкатегории в массив, мы должны получать только те, которые связаны с $category_id, предоставленным в параметре метода getSubcategories.И эти «методы get» должны возвращать массивы, чтобы мы могли проходить через них.

Примечание 2: Я знаю, что это потенциально опасный способ написания этого кода, так как мызапрашиваем базу данных каждый раз, когда мы выполняем итерацию в цикле foreach.И, как сказал Марк, это может быть очень неэффективно, если у вас много категорий и продуктов.Причина, по которой я написал это так, заключается в том, что он многословен и позволяет новому программисту понять идею, лежащую в основе того, что мы делаем, (по крайней мере, мне стало легче ее понимать).

Iнадеюсь, это прояснит вам все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...