PHP数组&;嵌套循环
我有一个URL列表,每个页面都是一个特定的类别: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
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";