Keresés

Új hozzászólás Aktív témák

  • nevemfel

    senior tag

    válasz lanszelot #21434 üzenetére

    46 sor - ezt nem tudom miért.

    Mert ha a json_decode-nak nem adsz második paraméterként true-t, akkor a JSON objektumot a php-ban stdClass objektumként kapod meg, míg a második esetben asszociatív tömbként.

    <?php

    function mivanbenne($variable) {
    echo '<pre>';
    echo htmlspecialchars(var_export($variable, true));
    echo '</pre>';
    }

    $data = '
    {
    "google": {
    "kep": "google.jpg",
    "link": "https:\/\/www.google.co.uk\/"
    },
    "youtube": {
    "kep": "youtube.jpg",
    "link": "https:\/\/www.youtube.com\/"
    }
    }';

    $data_array = json_decode($data);

    mivanbenne($data_array);

    /*
    (object) array(
    'google' =>
    (object) array(
    'kep' => 'google.jpg',
    'link' => 'https://www.google.co.uk/',
    ),
    'youtube' =>
    (object) array(
    'kep' => 'youtube.jpg',
    'link' => 'https://www.youtube.com/',
    ),
    )
    */

    $data_array = json_decode($data, true);

    mivanbenne($data_array);

    /*
    array (
    'google' =>
    array (
    'kep' => 'google.jpg',
    'link' => 'https://www.google.co.uk/',
    ),
    'youtube' =>
    array (
    'kep' => 'youtube.jpg',
    'link' => 'https://www.youtube.com/',
    ),
    )
    */

    Ha csak ki akarod írni a tartalmat, akkor nincs nagy különbség, $row->kep helyett $row["kep"]-ben kapod az adatot, de ha hozzá akarsz nyúlni, pl. hozzáfűzni új elemet, akkor objektummal macerásabb, nehezen olvashatóbb:

    $data_array = json_decode($data);

    $data_array->{'gmail'} = (object)[
    "kep" => "gmail.jpg",
    "link" => "https://gmail.com/"
    ];

    Asszociatív tömbnél egyszerűbb az egész:

    $data_array = json_decode($data, true);

    $data_array['gmail'] = [
    "kep" => "gmail.jpg",
    "link" => "https://gmail.com/"
    ];

Új hozzászólás Aktív témák

Hirdetés