2016-09-04 22 views
0

APIから記事や記事を取得しています。 JSONオブジェクトにはさまざまなものがあり、いくつかのアーティクルには他のものにはないプロパティがあります。JSONをAPIから解析する - 使用するデザインパターン - PHP

アイテムが繰り返され、プロパティが設定されている場合はそのプロパティを操作する必要があります。

これに取り組む最も良い方法は何ですか?

私は、私は非常に醜い見つける何かを今のところ実際に

...

foreach ($items as $key => $item) { 
    if(isset($item->title)){ 
    $parsed[$key]['title'] = $this->formatTitle($item->title); 
    } 
    if(isset($item->salutation)){$parsed[$key]['salutation'] = $item->salutation;} 
    if(isset($item->eventDate) && isset($item->enventEndDate)){ 
    $parsed[$key]['eventDates'] = $this->ersDate($item->eventDate, $item->eventEndDate); 
    $parsed[$key]['startDateTimestamp'] = $this->toTimestamp($item->eventDate); 
    } elseif(isset($item->eventDate) && !isset($item->enventEndDate)){ 
    $parsed[$key]['eventDates'] = $this->ersDate($item->eventDate); 
    $parsed[$key]['startDateTimestamp'] = $this->toTimestamp($item->eventDate); 
     } 

//... code continues ...

+0

この質問は、「最良の方法」によって正確に何が意味されているかを説明することで改善される可能性があります。きれいに見える?最短?最低メモリ使用量? –

答えて

1

ソースが予測不可能な形状をしているので、私はデータを解析周りのいずれかの方法があるとは思いません。

あなたの主なスクリプトがちょうどないようにするには、別の関数で抽象醜ことができます:

$parsed = parseAPI($items); 

あなたが$items = json_decode($apiResponse,true)を使用する場合は、代わりにオブジェクトの配列を取得します。その後、配列の+演算子をデフォルトの配列とともに使用して、すべてのAPIレスポンスを同じ形にキャストできます。

あなたはAPIから項目を取得するときに今、あなたが行うことができます
$defaultItem = [ 
    'salutation' => null, 
    'eventDate' => null, 
    'eventEndDate' => null, 
    ... 
]; 

$items = json_decode($apiResponse,true); 
foreach($items as &$item) $item += $defaultItem; 

$itemsの各メンバーは、あなたが期待するすべてのキーを持っています。いずれかのキーが見つからなかった場合、$defaultItemの一致するキーと値が挿入されました。

+0

ニース。ありがとうございました。なぜアイテムを参照してループを行うのですか? – Samuel

+0

@Samuel参照なしでは、(ループ変数 '$ item'を介して)配列に加えられた変更は、ループの後に失われます。リファレンスはループ変数を '$ items'の実際のメンバーを参照します。それがなければ '$ item'は単なるコピーです。この答えに基づいてソリューションを構築する場合は、upv​​oteを選択することを忘れないでください。 – BeetleJuice

+0

ありがとうございます。意味をなさない ええ、私はこのようにリファクタリングします。 – Samuel

関連する問題