Bir dizi olabilir, ya da bir değer olabilir JSON çıkışı ile nasıl başa çıkılır?

4 Cevap php

Ben başka bir kuruluşun API JSON kodlanmış çıktı alıyorum.

Birçok durumda, çıkış nesneleri içeren bir dizi (çok var ise) veya bir nesne (sadece bir tane bulunuyor ise) olabilir. Şu anda böyle işkence kod yazıyorum:

if ( is_array($json['candidateList']['candidate'][0]) ) {
  foreach ($json['candidateList']['candidate'] as $candidate) {
    // do something to each object
  }
}
else {
  // do something to the single object
}

Nasıl bu kadar kodumu "yok bir şey" kısmı sadece bir kez görünür ve standart bir sözdizimi kullanan işleyebilir?

4 Cevap

Sonra yineleme ile devam - eğer o değil, sadece o bir dizi yapmak.

// Normalize response into an array
if ( !is_array( $json['candidateList']['candidate'] ) )
{
  $json['candidateList']['candidate'] = array( $json['candidateList']['candidate'] );
}

// Process data
foreach ($json['candidateList']['candidate'] as $candidate) {
  // do something to each object
}

Bu durumda daha tutarlı olması gerektiğini besleme :) sağlayan kim söylemelidir sadece tek öğeli bir dizi olurdu böylece, bu, sadece tek bir aday olsa bile, bir dizi var her zaman uygun olacaktır.

Bir işlevi "do something" kod koymak, ve sonra her iki yerde işlevini çağırın. Bu kod modularizing yan yararı vardır.

Alternatif olarak, daha sonra iki yerde de senin dizi işleme kodu kullanmak, yalnızca tek bir unsur var ve etrafında bir dizi oluşturmak algılayabilir.

(Not: Ben Jaanus katılıyorum İyi-oluşturulmuş API her iki durumda da bir listesini dönecekti, liste uzun tek bir üyesi bile exactly bu nedenle...)

Eğer değişti API alabilirsiniz, Jaanus 'cevabı ile gitmek. Aksi halde, belki bir değer alır ve değeri (değer bir dizidir) veya (eğer değilse) değer içeren tek unsur dizi döndüren bir fonksiyon yazın.