2015-09-21 3 views
0

У меня есть скрипт PHP, который выполняет почти все то, что я хочу. Я извлекаю несколько бит информации из API и готовю CSV-документ - документ создается просто отлично, но несколько столбцов пустые, и я не уверен, как их вызвать из объекта (stdClass), в который я попадал мой vardump. Я пытаюсь получить следующие индексы от каждого из NUMKEY ниже объектов:PHP Понимание моего var_dump

  1. имя
  2. VariantCustomIds-> ID
  3. updated_at

Я действительно борется с моим var_dump из декодированный JSON. Вот что ответ JSON от АФИ в вопросе:


{ 
"623587": { 
    "caption": "", 
    "created_at": "2015-06-30T17:59:24+00:00", 
    "deleted": "0", 
    "id": "623587", 
    "links": { 
    "VariantCustomIds": [ 
     { 
     "id": "108601807" 
     } 
    ] 
    }, 
    "name": "SKU", 
    "updated_at": "2015-06-30T17:59:24+00:00" 
}, 
"840664": { 
    "caption": "", 
    "created_at": "2015-09-21T15:04:18+00:00", 
    "deleted": "0", 
    "id": "840664", 
    "links": { 
    "VariantCustomIds": [ 
     { 
     "id": "144012064" 
     } 
    ] 
    }, 
    "name": "Headband Style", 
    "updated_at": "2015-09-21T15:04:18+00:00" 
}, 
"840684": { 
    "caption": "", 
    "created_at": "2015-09-21T15:04:18+00:00", 
    "deleted": "0", 
    "id": "840684", 
    "links": { 
    "VariantCustomIds": [ 
     { 
     "id": "144012074" 
     } 
    ] 
    }, 
    "name": "Ink Type", 
    "updated_at": "2015-09-21T15:04:18+00:00" 
}, 
"840694": { 
    "caption": "", 
    "created_at": "2015-09-21T15:04:18+00:00", 
    "deleted": "0", 
    "id": "840694", 
    "links": { 
    "VariantCustomIds": [ 
     { 
     "id": "144012084" 
     } 
    ] 
    }, 
    "name": "Fabric Type", 
    "updated_at": "2015-09-21T15:04:18+00:00" 
} 
} 

я передаю это через функцию json_decode в PHP, и здесь это var_dump я получаю:


object(stdClass)#1308 (1) { ["623587"]=> object(stdClass)#1310 (7) { ["caption"]=> string(0) "" ["created_at"]=> string(25) "2015-06-30T17:59:24+00:00" ["deleted"]=> string(1) "0" ["id"]=> string(6) "623587" ["links"]=> object(stdClass)#1309 (1) { ["VariantCustomIds"]=> array(1) { [0]=> object(stdClass)#1303 (1) { ["id"]=> string(9) "108601798" } } } ["name"]=> string(3) "SKU" ["updated_at"]=> string(25) "2015-06-30T17:59:24+00:00" } } 

Я пробовал делать для каждого цикла на этом, но есть только 1 объект, когда я это делаю. Я попытался вызвать $ myVariable-> id, $ myVariable-> links и $ myVariable-> name. Все они возвращаются с NULL, когда я передаю их через var_dump().

Любая помощь была бы чрезвычайно оценена.

+0

Erhhh ... Какова ваша конкретная проблема? – felipsmartins

+0

Я понятия не имею, как назвать три конкретных индексов я уже упоминал в посте: имя VariantCustomIds-> идентификатор updated_at Когда я звоню им, что они возвращаются NULL, когда они, безусловно, не в ответе NULL. – JakeMWP

ответ

1

Посмотрите на json_decode documentation. Существует второй (оптический) параметр, который сообщает json_decode о возврате массива asoc. Поэтому ваш код должен выглядеть так:

$decoded = json_decode($jsonString, true); 
+0

Я не могу вас отблагодарить. Ты мой герой! – JakeMWP

4

Просто следуйте скобки/скобки, помня, что в JS, {} является объектом, и [] массив:

json = { 
|  | "623587": { 
|  |   | "caption": "", 
|  |   | "created_at": "2015-06-30T17:59:24+00:00", 
|  |   | "deleted": "0", 
|  |   | "id": "623587", 
|  |   | "links": { 
|  |   | |  | "VariantCustomIds": [ 
|  |   | |  | |     | { 
|  |   | |  | |     | | "id": "108601807" 
|  |   | |  | |     | | | 
$obj -> 623587 -> links -> variantcustomids [0] -> id 

Так что ваш окончательный PHP путь, используя соответствующие методы доступа и капитализации

$obj[623587]->links->VariantCustomIds[0]->id 
+0

Когда я вызываю индекс номера (который не является постоянным для всех элементов, которые я хочу вызвать), он дает мне эту ошибку: Ошибка анализа: ошибка синтаксиса, неожиданный T_LNUMBER, ожидающий T_STRING или T_VARIABLE или '{' или '$ ' – JakeMWP

+0

показать фактический код, который у вас есть, что вызывает это. –

+0

Зоран дал мне ответ, который я искал все время - я не декодировался как массив asoc. Спасибо! – JakeMWP

1

Я знаю, вы решили. Но вы также можете пойти на подход к объектам StdClass:

<?php 

$sample = file_get_contents('http://host/api/sample.json'); 
$data = json_decode($sample); 

foreach ($data as $id => $object) { 

    $name  = $object->name;   
    $id   = $object->links->VariantCustomIds[0]->id; #OR $id = $id  
    $updated_at = $object->updated_at; 
} 
+0

Интересно, я очень мало знаю о объектно-ориентированном программировании.Сегодня я нашел еще одно сообщение, которое объясняло мне, что массивы можно вызывать с помощью переменной $ variable ['key'], и что объекты - это $ variable-> key, и это был мой первый раз, когда я действительно понимал, как они были функционально разными. Лично я предпочитаю метод массива asoc, потому что мне легче его читать. – JakeMWP

Смежные вопросы