2010-08-26 155 views
0

我有一個網址列表,每個頁面都是一個特定的類別:PHP數組和嵌套循環

http://www.site.com/category-1/page.html 
http://www.site.com/category-2/page.html 
http://www.site.com/category-3/page.html 

在每一頁上都讓我們說4項。我想提取頁面上的每個項目,併爲其分配它的IE

category-1_ITEM - CAT-1 
category-1_ITEM - CAT-1 
category-1_ITEM - CAT-1 
category-1_ITEM - CAT-1 

category-2_ITEM - CAT-2 
category-2_ITEM - CAT-2 
category-2_ITEM - CAT-2 
category-2_ITEM - CAT-2 

category-3_ITEM - CAT-3 
category-3_ITEM - CAT-3 
category-3_ITEM - CAT-3 
category-3_ITEM - CAT-3 

我想這將是非常簡單的相應類別數量,但現在我不得不面對明顯的循環問題,這裏的代碼,我已刪除針對簡單起見,所有無關行:

$urls = array(
"http://www.site.com/category-1/page.html", 
"http://www.site.com/category-2/page.html", 
"http://www.site.com/category-3/page.html" 
); 

foreach ($urls as $url) { 

//Load Page, find items 

foreach($items as $item) { 

preg_match('#http\:\/\/www\.site\.com\/(.*?)\/page\.html#is',$url,$result); 

switch ($result[1]){ 

case "category-1": $cat = 'CAT-1'; break; 
case "category-2": $cat = 'CAT-2'; break; 
case "category-3": $cat = 'CAT-3'; break; 
} 

echo $item . ' - ' . $cat . '<br>'; 


} 
} 

這就是它輸出:

category-1_ITEM - CAT-1 
category-1_ITEM - CAT-1 
category-1_ITEM - CAT-1 
category-1_ITEM - CAT-1 

category-1_ITEM - CAT-2 
category-1_ITEM - CAT-2 
category-1_ITEM - CAT-2 
category-1_ITEM - CAT-2 

category-2_ITEM - CAT-2 
category-2_ITEM - CAT-2 
category-2_ITEM - CAT-2 
category-2_ITEM - CAT-2 

category-1_ITEM - CAT-3 
category-1_ITEM - CAT-3 
category-1_ITEM - CAT-3 
category-1_ITEM - CAT-3 

category-2_ITEM - CAT-3 
category-2_ITEM - CAT-3 
category-2_ITEM - CAT-3 
category-2_ITEM - CAT-3 

category-3_ITEM - CAT-3 
category-3_ITEM - CAT-3 
category-3_ITEM - CAT-3 
category-3_ITEM - CAT-3 

什麼我做錯了任何想法?我有一種感覺,這是一個簡單的錯誤,我只是沒有看到它。

+0

這些傢伙可能是對的,你需要添加代碼「//加載頁面,找到物品」以獲得真正的答案。 – 2010-08-26 21:40:23

回答

1

的問題是在此代碼:

//Load Page, find items 

如果我可能如此大膽地猜測,你可能做的是:

$items[] = "some content"; 
$items[] = "some content"; 

不是與常量,但關鍵是你寫在等號之前。所有的時候你都要在數組的最後添加新的項目,所以你第一次從第一頁獲得項目。第二次將第二頁的內容添加到該內容中,並且您在數組中有兩者都。換句話說:你忘記重置$物品。在//Load page, find items開頭添加$items = array(),你應該沒問題。

如果你是來自另一種語言,這個問題可能更好地解釋更多的技術術語:在PHP代碼塊不會創建一個新的範圍。基本上只有功能。

+0

確實!我喜歡簡單的解決方案,謝謝! – 2010-08-26 23:36:13

0

編輯:我相信你的問題是你每次循環都不清理$ items數組。

我測試過下面的代碼:

$urls = array(
"http://www.site.com/category-1/page.html", 
"http://www.site.com/category-2/page.html", 
"http://www.site.com/category-3/page.html" 
); 

$id = 0; 

foreach ($urls as $url) { 

$items = array(
"i" . $id++, 
"i" . $id++, 
"i" . $id++ 
); 


foreach($items as $item) { 

preg_match('#http://www.site.com/(.*?)/page.html#is',$url,$result); 

switch ($result[1]){ 

case "category-1": $cat = 'CAT-1'; break; 
case "category-2": $cat = 'CAT-2'; break; 
case "category-3": $cat = 'CAT-3'; break; 
} 

echo $item . ' - ' . $cat . '<br>'; 


} 
echo "<br/>"; 
} 

,我得到下面的輸出:

i0 - CAT-1 
i1 - CAT-1 
i2 - CAT-1 

i3 - CAT-2 
i4 - CAT-2 
i5 - CAT-2 

i6 - CAT-3 
i7 - CAT-3 
i8 - CAT-3 
+0

並感謝您的努力。 :) – 2010-08-26 23:37:16