[PHP] array probleem

Pagina: 1
Acties:
  • 135 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sequence
  • Registratie: Maart 2000
  • Laatst online: 27-05-2024

Sequence

Online marketing

Topicstarter
Ik heb een Mysql-db waar ik een aantal zaken uitgetrokken heb met de volgende code:
code:
1
2
3
$query = "select id,beschrijving,prijs,url from product";
$result = mysql_query($query) or die("Fout bij uitvoeren query");
$line = mysql_fetch_array($result, MYSQL_ASSOC);

Dan heb ik m'n array gevuld en als ik vervolgens dan met de volgende code de inhoud daarvan afdruk
code:
1
2
while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
print_r($line);

dan krijg ik de volgende output:

Array
(
[id] => 1
[beschrijving] => abcd
[prijs] => 9.00
[url] => http://www.bla.nl
)
Array
(
[id] => 1
[beschrijving] => efgh
[prijs] => 12.00
[url] => http://www.bla.nl
)
Array
(
[id] => 2
[beschrijving] => abcd
[prijs] => 17.50
[url] => http://www.bla.nl
)
Array
(
[id] => 2
[beschrijving] => efgh
[prijs] => 10.00
[url] => http://www.bla.nl
)
Array
(
[id] => 3
[beschrijving] => abcd
[prijs] => 15.00
[url] => http://www.bla.nl
)


Dat is dus de inhoud van m'n array.. maar wat wil ik nou?
Het lukt me niet om elke regel in het array als allemaal aparte regel af te drukken. Ik heb zitten spelen met foreach ($line as $col_value) maar dat lost niets op.

Uiteindelijk doel is om bovenstaand array af te drukken als:

1
abcd http://www.bla.nl 9.00
efgh http://www.bla.nl 12.00

2
abcd http://www.bla.nl 17.50
afgh http://www.bla.nl 10.00

3
abcd http://www.bla.nl 15.00

Wie helpt me een stapje op weg?

Acties:
  • 0 Henk 'm!

  • Aloys
  • Registratie: Juni 2005
  • Niet online
Je moet heel erg in stappen denken
Array -> producten
producten -> eigenschappen
array[0][id] of [beschrijving]

vbje
PHP:
1
2
3
4
5
6
7
8
for($i =0; $i< count($array); $i++) {

    // dit is het product
    // $array[$i];
    
    // geef een productbeschrijving
    echo "productnaam: " + $array[$i]["beschrijving"] + "<br />";
}


array[0] -> verwijst naar het eerste product
array[0]["id"] -> verwijst naar de ID van het eerste product ;)

edit: sorry zit nog een beetje in c# te denkenOch helemaal niet op gelet dat je met een DB bezig was, alleen naar je array gekeken! 8)7

[ Voor 30% gewijzigd door Aloys op 01-06-2007 17:43 ]


Acties:
  • 0 Henk 'm!

  • ADT_Phantom
  • Registratie: April 2006
  • Laatst online: 17-08 18:22
Elke keer dat je
code:
code:
1
$line = mysql_fetch_array($result, MYSQL_ASSOC)

uitvoert haalt hij 1 regel op van je resultaten als een array.

Je kan dan om dit af te drukken dit gebruiken:

code:
1
2
3
4
5
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
print($line['id']);
print($line['beschrijving']);
print($line['url']);
}

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
waarom 2 x $line = mysql_fetch_array($result, MYSQL_ASSOC); ?

PHP:
1
2
3
4
5
6
7
8
9
$result = mysql_query($query) or die("Fout bij uitvoeren query");
while($row = mysql_fetch_assoc($result))
{
    foreach($row as $key => $value)
    {
        echo $key . ' ' . $value . '<br />';
    }
    echo '<br />';
}


niet getest maar dit zou moeten werken zover ik begrijp wat je wilt...

trouwens, heb je nu dubbele id's of ?


edit: als je dus gewoon een regel wilt creeeren het volgende kunt zetten in de while loop:
PHP:
1
echo $row['id'] . ' ' . $row['beschrijving'] . ' ' . $row['prijs'] . ' ' . $row['url'] . '<br />';


overigens is dit erg basic hoor...makkelijk te vinden in de php manual

[ Voor 25% gewijzigd door Cartman! op 01-06-2007 17:51 ]


Acties:
  • 0 Henk 'm!

  • ADT_Phantom
  • Registratie: April 2006
  • Laatst online: 17-08 18:22
@Cartman! Je hoeft hier niet eens de foreach te gebruiken aangezien er maar 1 row steeds wordt gevuld en de key in dit geval niet nodig is. Een print($row['id']); is voldoende.

Acties:
  • 0 Henk 'm!

  • Aloys
  • Registratie: Juni 2005
  • Niet online
Voer zijn code maar eens uit, dan zul je zien dat ie een mooie uitkomst heeft als die van jou ;)

Acties:
  • 0 Henk 'm!

  • ADT_Phantom
  • Registratie: April 2006
  • Laatst online: 17-08 18:22
Aloys schreef op vrijdag 01 juni 2007 @ 17:45:
Voer zijn code maar eens uit, dan zul je zien dat ie een mooie uitkomst heeft als die van jou ;)
Klopt, maar het is in dit geval niet nodig. Dat mag de TS zelf uitzoeken.

Acties:
  • 0 Henk 'm!

  • Tsunami
  • Registratie: Juni 2002
  • Niet online
Uhm, de TS wil de resultaten groeperen op id? Dat zie ik jullie code nog niet doen...

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  $query   = "SELECT id, beschrijving, prijs, url FROM product";
  $result  = mysql_query($query) or die("Fout bij uitvoeren query");
  $results = array();
  
  while ($line = mysql_fetch_assoc($result)) {
    $results[$line['id']][] = array('beschrijving' => $line['beschrijving'],
                                    'prijs'        => $line['prijs'],
                                    'url'          => $line['url']);
  }
  
  foreach ($results as $id => $products) {
    echo $id . '<br />' . PHP_EOL;
    
    foreach ($products as $product) {
      echo $product['beschrijving'] . ' '      .
           $product['url']          . ' '      .
           $product['prijs']        . '<br />' . PHP_EOL;
    }
  }

[ Voor 3% gewijzigd door Tsunami op 01-06-2007 22:10 . Reden: Inderdaad foutje van mij, gefixt. ]


Acties:
  • 0 Henk 'm!

  • Sequence
  • Registratie: Maart 2000
  • Laatst online: 27-05-2024

Sequence

Online marketing

Topicstarter
Ik heb de code van Tsunami nu alsvolgt geimplementeerd:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$query = "select id,beschrijving,prijs,url from product";
$result = mysql_query($query) or die("Fout bij uitvoeren query");
$results = array();
while ($line = mysql_fetch_assoc($result)) {
$results[$line['id']][] = array($line['beschrijving'],$line['prijs'],$line['url']);
}
foreach ($results as $id => $products) 
{
print $id.'<br />' . PHP_EOL;
foreach ($products as $product) 
    {
    echo $product['beschrijving'] . ' '      .
             $product['url']          . ' '      .
             $product['prijs']        . '<br />' . PHP_EOL;
    }
}


Dit levert me de volgende output:
code:
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
1<br />
  <br />
  <br />
  <br />
  <br />

2<br />
  <br />
  <br />
  <br />
  <br />
4<br />
  <br />
  <br />
  <br />

5<br />
  <br />
  <br />
  <br />
  <br />
6<br />
  <br />
  <br />
  <br />
  <br />

Het aantal breaks is gelijk aan het aantal producten, dus het zit al heel dicht in de buurt! :)
Toch lukt het me niet ook de beschrijving, url en prijs in beeld te krijgen.. waarschijnlijk is het iets heel kleins maar toch (heb al lopen proberen met extra quotes of minder quotes maar dat hielp niks).

Acties:
  • 0 Henk 'm!

  • Sequence
  • Registratie: Maart 2000
  • Laatst online: 27-05-2024

Sequence

Online marketing

Topicstarter
Tsunami net ff op MSN gesproken en hij kwam alsnog met de goede oplossing!
PHP:
1
$results[$line['provid']][] = array($line['beschrijving'],$line['prijs'],$line['url']);

moet zijn:
PHP:
1
$results[$line['provid']][] = array('beschrijving' => $line['beschrijving'],'prijs' => $line['prijs'],'url' => $line['url']);

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Waarom loop je nu eerst door je resultaten en sla je het op in een array om vervolgens dan later die aangemaakte array nog een keer te loopen....?

Acties:
  • 0 Henk 'm!

Verwijderd

Lijkt mij ook een beetje omslachtig. Je kunt toch "ORDER BY id" doen en dan id alleen printen als die anders is dan de voorgaande id (ff in een var onthouden dus)?

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Sowieso doe je iets verkeerd als je dubbele id's hebt, hoe wil je anders ooit zo'n row gaan editten ?

Acties:
  • 0 Henk 'm!

  • Sequence
  • Registratie: Maart 2000
  • Laatst online: 27-05-2024

Sequence

Online marketing

Topicstarter
De code is deel van een groter script, waarin wel degelijk unieke id's zijn verwerkt. ;)
Pagina: 1