2011-12-31 116 views
0

我訪問一個返回元素數組的API。如何訪問只有一個元素或多個元素的數組中的同一元素?

Array { 

    [response] => Array { 

     [name] => Frank 

    } 

} 

但是,如果有多個結果,每深入一層考慮到每一個結果:

Array { 

    [response] => Array { 

     [0] = > Array { 

     [name] => Frank 

     } 

     [1] = > Array { 

     [name] => John 

     } 

    } 

} 

如果只有一個元素,它會返回數組

這很令人沮喪,因爲這意味着我必須首先檢查是否只有一個元素或多個元素,然後分別對每個元素進行編碼。

是否有更好的解決方案可以自動處理這兩種情況(例如,一個結果與多個結果)並始終檢索可用的名稱?

+1

這聽起來像一個非常惱人的API設計。你可以發佈你目前使用的代碼示例嗎? – rdlowrey 2011-12-31 19:30:48

+0

您可以修改從一個結果返回的數組,像結構數組一樣構造它,這樣您只需要處理響應1方法。 – dm03514 2011-12-31 19:33:59

回答

2

你既可以寫,將處理您的特殊情況迭代器,或者你迭代它與特殊情況的交易:

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

特殊情況可非常煩人,所以儘早照顧他們,最好讓他們消失。

+1

你可以解釋一下這行代碼:'isset($ responses [0])|| $迴應[0] = $迴應;'​​?謝謝。 – ProgrammerGirl 2011-12-31 19:57:14

+1

'foreach',而不是'froeach';) – ComFreek 2011-12-31 20:09:39

+0

@編程器:如果'0'元素沒有設置,首先從'$ responses'中創建一個數組。這就是該行表達的內容。它處理你的特殊情況,即只有一個響應。 – hakre 2011-12-31 20:28:42

0

(如果可以的話)調整原始API以始終使用索引鍵返回數組,即使數組中只有一個項目。

否則,在您從API獲取結果後添加此項。

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

我將如何調整我不控制的外部API?有什麼樣的預處理我可以做? – ProgrammerGirl 2011-12-31 19:56:03

+0

如果這是外部的,你無法控制它。所以你必須使用我提到的第二種方法。 – emaillenin 2011-12-31 19:57:43

相關問題