niet standaard structuur array

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Peter  paul

peter paul

16/03/2015 12:16:30
Quote Anchor link
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 (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
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);
}


?>


</code>
 
PHP hulp

PHP hulp

20/04/2024 10:58:57
 
Ward van der Put
Moderator

Ward van der Put

16/03/2015 12:31:55
Quote Anchor link
Controleer in de foreach bijvoorbeeld met array_key_exists() of een sleutel ontbreekt en stel die dan in op een lege string.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

16/03/2015 12:57:25
Quote Anchor link
gewoon

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
<?php
foreach($array['data'] as $key => $data)
{

    echo 'key: ' . $key . '<br>';
    echo 'id: ' . $data['id'] . '<br>';
    echo 'name: ' . $data['name'] . '<br>';
    echo 'descriptions:<br>';

    foreach($data['description'] as $description)
    {

        echo $description . '<br>';
    }
}

?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
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

eventueel aangevuld met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
WHERE
    m.id=$id

of
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
ORDER BY
    m.id
Gewijzigd op 16/03/2015 13:25:42 door Frank Nietbelangrijk
 
Thomas van den Heuvel

Thomas van den Heuvel

16/03/2015 14:32:06
Quote Anchor link
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.
 



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.