2013-03-01 82 views
2

我有解析「條目的嵌套數組中的函數:PHP的foreach循環用一個單一的元素

$data = Array(
    [date] => 'date' 
    [entry] => Array(
     [0] => Array(
     [Title] => 'title0' 
     [Price] => 'price0' 
    ) 
     [1] => Array(
     [Title] => 'title1' 
     [Price] => 'price1' 
    ) 
    ) 
) 

通過這個具有foreach($data['entry'] as $entry){循環,如果有多個條目的偉大工程。但是,它只有一個條目我服務:

$data = Array(
    [date] => 'date' 
    [entry] => Array(
     [Title] => 'title' 
     [Price] => 'price' 
    ) 
) 

而foreach循環失敗。

是否有一個優雅的方式來編寫一個foreach,它將抓取每個條目[0],條目[1]子數組(如同普通條目),或者如果只有一個條目並且抓取整個「條目」數組呢?


附錄:我做的項目的東西是相當參與...我認爲我可以分開了這一點成不同的功能,做一個if(is_array)檢查然後一旦調用函數,或對於每一個...但這似乎不雅...

回答

2

技術上講,你不需要$臨時變量的一步。

$data['entry'] = isset($data['entry'][0]) ? $data['entry'] : array($data['entry']); 
+0

不錯 - 而且更優雅。 – Alltheprettyhorses 2013-03-01 04:25:12

2

最好的方法是創建一個基於鍵的數組,即使只有一個。

像這樣:

$data = Array(
    [date] => 'date' 
    [entry] => Array(
     [0] => Array(
     [Title] => 'title0' 
     [Price] => 'price0' 
    ) 
    ) 
) 
+0

同意,但是我沒有在單次入境數據是如何提供給我的控制...有一個簡單的方法把它輕推到一個,如果它是不是已經? – Alltheprettyhorses 2013-03-01 02:30:41

+0

將子數組重建爲預期的格式。 – MECU 2013-03-01 03:28:29

0

這是因爲你這樣定義的結構多維數組:

entry = array(array())

在第二種情況,你只申報entry = array()

思考:

if(is_array(entry[0])) ...

+0

是的,這正是我的觀點......如果(is_array)是一種解決方法,但不夠高雅(正如我在附錄中已經指出的那樣)。 – Alltheprettyhorses 2013-03-01 02:32:23

0
if(!isset($data['entry']['0'])){ 
    $temp = $data['entry']; 
    unset($data['entry']); 
    $data['entry']['0'] = $temp; 
} 
foreach($data['entry'] as $entry) ... 

不太 「優雅」,但它的工作原理...

相關問題