Multidimensionale array maken voor Smarty

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Ariën  -
Beheerder

- Ariën -

06/04/2011 14:47:34
Quote Anchor link
Ik wil een multi-dimensionale array maken in PHP voor Smarty.

Nu heb ik tot nu toe al dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$result
= mysql_query("
SELECT ID, title
FROM news_categories
"
);
if($result) {
    while($newscat = mysql_fetch_assoc($result)) {
                $news_categories[] = $newscat;
    }
}
else {
// fout enzo
}
?>

Dit selecteert dus de categorieën. Maar nu wil ik dus ook de items bij de categorieeën tonen, en dit in een multidimensionale array verwerken.
Deze items komen uit de tabel news.

Iemand die even een opzet kan maken hoe ik verder moet?
Gewijzigd op 06/04/2011 17:36:04 door - Ariën -
 
PHP hulp

PHP hulp

20/04/2024 05:24:59
 
Mar cel

Mar cel

06/04/2011 16:29:15
Quote Anchor link
Uiteindelijk wil je dus iets als dit?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[nieuwscategory-1]
     [newsmessage1]
         [title]
         [text]
         [date]
      [newsmessage2]
         [title]
         [text]
         [date]
     [newsmessage2]
         [title]
         [text]
         [date]
[nieuwscategory-2]
     [newsmessage1]
         [title]
         [text]
         [date]
      [newsmessage2]
         [title]
         [text]
         [date]
     [newsmessage2]
         [title]
         [text]
         [date]
[nieuwscategory-3]
     [newsmessage1]
         [title]
         [text]
         [date]
      [newsmessage2]
         [title]
         [text]
         [date]
     [newsmessage2]
         [title]
         [text]
         [date]
Gewijzigd op 06/04/2011 16:29:38 door Mar cel
 
- Ariën  -
Beheerder

- Ariën -

06/04/2011 17:36:18
Quote Anchor link
Correct...
Enig idee?
 
Jelmer -

Jelmer -

06/04/2011 17:38:28
Quote Anchor link
Ik denk dat het efficiënter is wanneer je direct alle items uit de db trekt, en daar de categorieën aan vast joint. Iets a la:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php

$result
= mysql_query("
    SELECT
        i.id,
        i.title,
        i.pubdate,
        c.id as cat_id,
        c.title as cat_title
    FROM
        news_items as i
        RIGHT JOIN news_categories as c ON
            i.cat_id = c.id
"
);

$data = array();

while ($item = mysql_fetch_assoc($result))
    $data[$item['cat_title']][] = $item;

/*
$data = array(
    'nieuws' => array(
        0 => array(
            'id' => 1,
            'title' => 'PHP 6 is uit!'
            'pubdate' => '2012-12-21'
        ),
        1 => array(
            'id' => 3,
            'title' => 'Zend neemt MySQL over van Oracle',
            'pubdate' => '2011-12-32'
        ),
    'onzin' => array(
        0 => array(
            'id' => 6,
            'title' => 'Man steekt mes in broncode',
            'pubdate' => '2011-01-03'
        )
);
*/

?>
 
- Ariën  -
Beheerder

- Ariën -

06/04/2011 18:25:45
Quote Anchor link
Aha, ja, een join zou ook nog kunnen.
Hartelijk bedankt, ik ga het eens inbouwen.
 
- Ariën  -
Beheerder

- Ariën -

07/04/2011 21:35:33
Quote Anchor link
Het lukt niet. Ik krijg hiermee alle items terug, en dat wil ik dus niet.

Ik krijg heel leuk ALLE items eruit, en ik wil 5 recente per categorie.
Dus twee queries lijken me echt onvermijdelijk.

Dus hoe kan ik er dan voor zorgen dat ik zo een array krijg?

En kan iemand me vertellen hoe ik deze in Smarty kan verwerken?
Het lijkt er dus op dat ik {foreach} twee keer genest moet gaan gebruiken.

Kan iemand me nog een goed advies geven over hoe verder? Ik zit er al enige tijd mee te stoeien en raak echt geen meter verder..........
Gewijzigd op 07/04/2011 21:43:00 door - Ariën -
 
Ruben Vanhoeyveld

Ruben Vanhoeyveld

07/04/2011 21:38:53
Quote Anchor link
ORDER BY recentdateortimeofzo LIMIT 0,5 ofzo? Kan je dit niet gebruiken?
 
- Ariën  -
Beheerder

- Ariën -

07/04/2011 21:48:11
Quote Anchor link
...dan sorteert hij de laatste ja, maar niet op categorie.
Dat wil ik dus niet.

Ik wil steeds de laatste 5 per categorie

Het ziet er echt naar uit dat ik twee queries moet gebruiken, eentje voor de categorieën, en eentje voor de items.

Wat ik nu dus weer heb (globaal gezien):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
$result_cats = mysql_query("SELECT ID, title FROM news_categories");
while($newscat = mysql_fetch_assoc($result_cats)) {

    $data = array();
    $sql = "SELECT * FROM news WHERE catID ='".$newscat['ID']."' ORDER BY date_posted DESC LIMIT 5";
    echo $sql;
    $result_items = mysql_query($sql);
    while($item = mysql_fetch_assoc($result_items)) {
        $data[$newscat['title']][] = $item;
        }
}

Maar ja, de array $data geeft maar één categorie met 5 laatste items, en niet alle categorieën?
Gewijzigd op 07/04/2011 22:58:31 door - Ariën -
 
- Ariën  -
Beheerder

- Ariën -

08/04/2011 22:00:23
Quote Anchor link
$data = array(); hoorde buiten de whiles.....

gefixxed...
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.