PHP数组&;嵌套循环

PHP数组&;嵌套循环,php,arrays,loops,Php,Arrays,Loops,我有一个URL列表,每个页面都是一个特定的类别: 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个项目。我想提取每页上的每个项目,并为其分配相应的类别号,即 category-1_ITEM - CAT-1 category-1_ITEM - CAT-1 category-1_I

我有一个URL列表,每个页面都是一个特定的类别:

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个项目。我想提取每页上的每个项目,并为其分配相应的类别号,即

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>';


}
}
你知道我做错了什么吗?我感觉这是一个简单的错误,我只是看不到而已。

编辑:我相信您的问题在于每次循环时都没有清除$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/>";
}

此代码中存在问题:

//Load Page, find items
如果我可以大胆猜测的话,你可能在做这样的事情:

$items[] = "some content";
$items[] = "some content";
不是常数,关键是你在等号前写的。在将新项目添加到数组末尾的所有时间,因此第一次从第一页获取项目时。第二次将第二个页面的内容添加到该页面时,数组中同时包含这两个页面的内容。换句话说:您忘记重置$items。将
$items=array()
添加到
//加载页面的开头,找到items
,您应该就没事了


如果您来自另一种语言,那么可以用更专业的术语更好地解释这个问题:在php中,代码块不会创建新的作用域。基本上只有函数才能做到。

这些家伙可能是对的,你需要为“//Load Page,find items”添加代码,才能找到真正的答案。
//Load Page, find items
$items[] = "some content";
$items[] = "some content";