2011-12-31 5 views
0

要素の配列を返すAPIにアクセスします。1つの要素または複数の要素のみを持つ配列の同じ要素にアクセスするにはどうすればよいですか?

一つだけの要素がある場合、それはとして配列を返します:複数の結果がある場合に

Array { 

    [response] => Array { 

     [name] => Frank 

    } 

} 

しかし、それはそれぞれの結果を考慮して1つのレベル深く行く:

Array { 

    [response] => Array { 

     [0] = > Array { 

     [name] => Frank 

     } 

     [1] = > Array { 

     [name] => John 

     } 

    } 

} 

これは非常に不満です。なぜなら、最初に要素が1つか複数あるかどうかをチェックしてから、それぞれ別々にコードを作成しなければならないということです。

自動的に両方のシナリオ(たとえば1つの結果と複数の結果)を処理し、常に関係なく使用できる名前を取得する優れたソリューションがありますか?

+1

これは本当に面倒なAPIデザインのようです。現在使用しているコードサンプルを投稿できますか? – rdlowrey

+0

1つの結果から返された配列を変更して、複数の結果配列のように構造化することができます。この方法では、応答1を処理するだけです。 – dm03514

答えて

2

非常に迷惑なので、早めに世話し、理想的にはそれらを消滅させる。

+1

あなたはこの行が何をしているのかを教えてください: 'isset($ responses [0])|| $ respond [0] = $ responses; '?ありがとう。 – ProgrammerGirl

+1

'foreach'ではなく、' froeach';) – ComFreek

+0

@Programmer: '0'要素が設定されていない場合は、まず' $ respond'から配列を作成してください。それが、その行の表現がするものです。あなたの特殊なケースを扱うのは、ただ1つの応答しかないということです。 – hakre

0

(可能な場合)配列にアイテムが1つしかない場合でも、インデックス付きキーを使用して配列を常に返すように、元のAPIを微調整します。

これ以外の場合は、APIから結果を取得した後にこれを追加します。ができ

foreach ($array['response'] as $responses) 
{ 
    isset ($responses[0]) || $responses = array($responses); 
    foreach ($repsonses as $response) 
    { 
     # standard processing code per each item. 
    } 
} 

特殊例:あなたはあなたの特殊なケースに対処するだろうイテレータを書くことができるか、あなたはそれの上に特殊なケースとの契約を反復

if(count($result['response'])==1) { $newResult['response'][0]=$result; } 
else { $newResult=$result; } 
+0

私は制御しない外部APIをどうやって調整するのですか?私ができる前処理の種類はありますか? – ProgrammerGirl

+0

これが外部の場合は、制御できません。私が言及した第2の方法を使用しなければなりません。 – emaillenin

関連する問題