我有一个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>';
}
}下面是它输出的内容:
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 知道我哪里做错了吗?我有一种感觉,这只是一个简单的错误,我只是看不出来。
发布于 2010-08-27 05:16:00
问题出在下面的代码中:
//Load Page, find items如果我可以大胆地猜测一下,您可能会这样做:
$items[] = "some content";
$items[] = "some content";不使用常量,但关键是您在等号之前写的内容。每次都是将新项添加到数组的末尾,因此第一次从第一页开始添加项。第二次将第二个页面的内容添加到该数组中时,这两个页面都包含在数组中。换句话说:您忘记了重置$items。在//Load page, find items的开头添加$items = array(),这样就没问题了。
如果你来自另一种语言,也许用更专业的术语来解释这个问题更好:在php代码中,块不会创建新的作用域。基本上只有函数可以做到这一点。
发布于 2010-08-27 04:58:18
编辑:我认为你的问题在于你没有在每次循环时清除$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-3https://stackoverflow.com/questions/3579422
复制相似问题