Ik heb de volgende gegevens:

auto1 kan geleverd worden in geel, groen en blauw
auto2 kan geleverd worden in oranje
auto3 kan geleverd worden in paars, rood en zwart.

Hoe zet ik deze gegevens nu in een array (naar ik aanneem een 2 dimensionele array) en hoe lees ik deze array weer uit ?

Volgende vraag:

Hoe zet ik deze 2D-array dan in de database ?
database:

tabel kleuren
id > kleur
1 > 'geel'
2 > 'groen'
3 > 'blauw'

tabel autos
id > auto
1 > 'auto1'
2 > 'auto2'
3 > 'auto3'

tabel auto_kleur

auto_id > kleur_id
1 > 1
1 > 2
1 > 3
2 > 3

dus 1 lijst met kleuren
1 lijst met auto's
en een koppeltabel om de auto's en kleuren te koppelen.
Dat opent ook de mogelijkheid dat de kleur geel niet alleen voor auto1, maar ook voor een andere auto gebruikt kan worden
Ivo je bedoelt MySQL joinen?

SELECT autos.auto, kleuren.kleur
FROM autos
JOIN auto_kleur ak ON ak.auto_id = autos.id
JOIN kleuren ON kleuren.id = ak.kleur_id


Dank je Ivo, maar hoe zit het nu met die array.

Kan ik zoiets doen:

array [auto] [kleuren] =
[auto1][geel, groen, blauw]
[auto2][oranje]
[auto3][paars, rood, zwart]

<?php
$aArray = array(); // leeg array klaar zetten
//  voer query uit
while($row = xxx_fetch()) { // fetch van jouw keuze
   $aArray[$row->auto][] = $row->kleur;   
}

var_dump($aArray);
?>
Gewoon print_r gebruiken of var_dump zoals ivo al aangaf om die arrays te bestuderen. Ik denk dat dat wel heel belangrijk is om het te leren.

<?php

// array van auto's
$cars = array(
// associatieve array met kenmerken van één auto
array(
'id' => 1,
'brand' => 'Volvo',
// array met kleuren
'colors' => array(
'geel',
'groen',
'blauw'
),
),
array(
'id' => 2,
'brand' => 'BMW',
'colors' => array(
'wit'
),
),
);

foreach($cars as $car)
{
echo $car['brand'] . " leverbaar in de kleuren:\n";

foreach($car['colors'] as $color)
{
echo $color . "\n";
}
}

?>

[size=xsmall]Toevoeging op 01/07/2015 11:44:04:[/size]

Dit kan dus met arrays maar met een database is het anders. In de database moet je gewoon gaan opsplitsen in verschillende tabellen.

Je hebt in ieder geval een tabel cars nodig en een tabel colors. Dan zou ik kiezen voor een koppeltabel.


tabel colors:
(color_id, color)
- 1, wit
- 2, groen
- 3, geel
- 4, blauw

tabel cars:
(car_id, brand)
- 1, Volvo
- 2, BMW

tabel cars_colors:
(car_id, color_id)
1, 3
1, 2
1, 4
2, 1


Om die kleuren weg te schrijven gewoon weer de foreach gebruiken als in bovenstaand voorbeeld:
<?php

foreach($cars as $car)
{
foreach($car['colors'] as $color)
{
// INSERT INTO cars_colors (car_id, color_id) VALUES ($car['car_id'], $color['color_id'])
}
}
?>

Het probleem komt bij het selecteren:


SELECT 
	ca.car_id, ca.brand, co.color 
FROM 
	cars ca 
JOIN 
	cars_colors cc 
ON 
	ca.car_id=cc.car_id 
JOIN 
	colors co 
ON 
	cc.color_id=co.color_id


levert op:

<?php
array(
array(
'car_id' => 1,
'brand' => 'Volvo',
'color' => 'geel',
),
),
array(
'car_id' => 1,
'brand' => 'Volvo',
'color' => 'groen',
),
),
array(
'car_id' => 1,
'brand' => 'Volvo',
'color' => 'blauw',
),
),
array(
'car_id' => 2,
'brand' => 'BMW',
'color' => 'wit',
),
),
)
?>
dan moet je dat ALS JE DAT WILT zelf omzetten naar een multi array:

<?php
$cars = array();
while($row = mysqli_fetch_assoc())
{
$cars[$row['car_id']]['brand'] = $row['brand'];
$cars[$row['car_id']]['colors'][] = $row['color']; // let op de extra []
}

echo '<pre>';
print_r($cars);
?>
Ivo P op 30/06/2015 04:46:35


SELECT autos.auto, kleuren.kleur
FROM autos
JOIN auto_kleur ak ON ak.auto_id = autos.id
JOIN kleuren ON kleuren.id = ak.kleur_id





Ik denk dat je ak bent vergeten: JOIN kleuren ON kleuren.id = ak.kleur_id (JOIN kleuren ak ON kleuren.id = ak.kleur_id)
Wauw! geweldig. Ik ga hiermee aan de slag. Ik moet nog zoveel leren.
Dank.

@Johan

Nee toch?
Of snap ik gewoon niet wat je bedoelt?
Ik weet het niet zeker dus vandaar dat ik naar vroeg hahaha jij weet zowiezo beter dan mij.

Ik dacht dat
JOIN kleuren ON kleuren.id = ak.kleur_id
moest zijn
JOIN kleuren ak ON kleuren.id = ak.kleur_id

Reageren