niet standaard structuur array
Sorry voor de misschien iets vage titel, ik zal het proberen uit te leggen. Ik krijg via een aan API, Json binnen die decode ik en dan komt er een array als in onderstaande voorbeeld uit.Deze wil ik informatie graag opslaan in my MySQL DB.
Doordat de structuur niet altijd het zelfde is (het aantal discriptions verschilt) krijg ik uiteraard de de error "Undefined offset" omdat niet alle arrays meerdere discriptions heeft. Is hier een oplossing voor??
<code>
</code>
Doordat de structuur niet altijd het zelfde is (het aantal discriptions verschilt) krijg ik uiteraard de de error "Undefined offset" omdat niet alle arrays meerdere discriptions heeft. Is hier een oplossing voor??
<code>
Code (php)
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
$array = Array
(
"data" => Array
(
"4353" => Array
(
"id" => 4353,
"name" => "Example1",
"description" => Array
(
"0" => "description 1",
"1" => "description 2",
"2" => "description 3",
),
),
"4352" => Array
(
"id" => 4352,
"name" => "Example2",
"description" => Array
(
"0" => "description 1",
),
),
"4113" => Array
(
"id" => 4113,
"name" => "Example4",
"description" => Array
(
"0" => "description 1",
"1" => "description 2",
"2" => "description 3",
"3" => "description 4",
),
),
)
);
//store
foreach($array['data'] as $key => $value) {
$sql[] = "
(
'" . mysql_real_escape_string($array['data'][$key]['id']) . "',
'" . mysql_real_escape_string($array['data'][$key]['name']) . "',
'" . mysql_real_escape_string($array['data'][$key]['description'][0]) . "',
'" . mysql_real_escape_string($array['data'][$key]['description'][1]) . "',
'" . mysql_real_escape_string($array['data'][$key]['description'][2]) . "',
'" . mysql_real_escape_string($array['data'][$key]['description'][3]) . "'
)";
}
$sql = "INSERT INTO masteries (id, name, description1, description2, description3, description4) VALUES " . implode(",",$sql) . "";
if (mysqli_query($connect, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($connect);
}
?>
$array = Array
(
"data" => Array
(
"4353" => Array
(
"id" => 4353,
"name" => "Example1",
"description" => Array
(
"0" => "description 1",
"1" => "description 2",
"2" => "description 3",
),
),
"4352" => Array
(
"id" => 4352,
"name" => "Example2",
"description" => Array
(
"0" => "description 1",
),
),
"4113" => Array
(
"id" => 4113,
"name" => "Example4",
"description" => Array
(
"0" => "description 1",
"1" => "description 2",
"2" => "description 3",
"3" => "description 4",
),
),
)
);
//store
foreach($array['data'] as $key => $value) {
$sql[] = "
(
'" . mysql_real_escape_string($array['data'][$key]['id']) . "',
'" . mysql_real_escape_string($array['data'][$key]['name']) . "',
'" . mysql_real_escape_string($array['data'][$key]['description'][0]) . "',
'" . mysql_real_escape_string($array['data'][$key]['description'][1]) . "',
'" . mysql_real_escape_string($array['data'][$key]['description'][2]) . "',
'" . mysql_real_escape_string($array['data'][$key]['description'][3]) . "'
)";
}
$sql = "INSERT INTO masteries (id, name, description1, description2, description3, description4) VALUES " . implode(",",$sql) . "";
if (mysqli_query($connect, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($connect);
}
?>
</code>
Controleer in de foreach bijvoorbeeld met array_key_exists() of een sleutel ontbreekt en stel die dan in op een lege string.
gewoon
Toevoeging op 16/03/2015 13:04:46:
Echter wil je daarna de omschrijvingen in de database opslaan en loop je weer tegen een vast aantal kolommen aan die je hebt aangemaakt voor de omschrijvingen. Dat zou je eventueel nog kunnen oplossen door een aparte tabel voor de omschrijvingen te maken.
Je krijgt dan zoiets:
tabel masteries:
-id
-name
tabel descriptions:
-id
-masteries_id
-description
-masteries_id verwijst dan naar het unieke id in de tabel masteries
Toevoeging op 16/03/2015 13:23:49:
Later heb je dan een iets uitgebreidere query nodig als je info uit beiden tabellen wilt halen:
eventueel aangevuld met:
of
Code (php)
Toevoeging op 16/03/2015 13:04:46:
Echter wil je daarna de omschrijvingen in de database opslaan en loop je weer tegen een vast aantal kolommen aan die je hebt aangemaakt voor de omschrijvingen. Dat zou je eventueel nog kunnen oplossen door een aparte tabel voor de omschrijvingen te maken.
Je krijgt dan zoiets:
tabel masteries:
-id
-name
tabel descriptions:
-id
-masteries_id
-description
-masteries_id verwijst dan naar het unieke id in de tabel masteries
Toevoeging op 16/03/2015 13:23:49:
Later heb je dan een iets uitgebreidere query nodig als je info uit beiden tabellen wilt halen:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
SELECT
m.id, m.name, d.description
FROM
descriptions d
JOIN
masteries m
ON
m.id = d.masteries_id
m.id, m.name, d.description
FROM
descriptions d
JOIN
masteries m
ON
m.id = d.masteries_id
eventueel aangevuld met:
of
Gewijzigd op 16/03/2015 13:25:42 door Frank Nietbelangrijk
De vraag is dus eigenlijk: is er een specificatie van de data die wordt aangeleverd, waarin staat hoeveel omschrijvingen er maximaal zijn. Dat zou eigenlijk (mede) moeten bepalen hoe je je database structureert en hoe je importeert.
Daarnaast, hoe vaak voer je een import uit? Verloopt dit import-proces automatisch? Et cetera.
Daarnaast, hoe vaak voer je een import uit? Verloopt dit import-proces automatisch? Et cetera.




