首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP数组和嵌套循环

PHP数组和嵌套循环
EN

Stack Overflow用户
提问于 2010-08-27 04:55:15
回答 2查看 318关注 0票数 0

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

代码语言:javascript
复制
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个项目。我想提取每个页面上的每个项目,并为其分配相应的类别编号。

代码语言:javascript
复制
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   

我认为这将是非常简单的,但现在我必须处理明显的循环问题,这是代码,为了简单起见,我删除了所有不相关的行:

代码语言:javascript
复制
$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>';


}
}

下面是它输出的内容:

代码语言:javascript
复制
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 

知道我哪里做错了吗?我有一种感觉,这只是一个简单的错误,我只是看不出来。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-27 05:16:00

问题出在下面的代码中:

代码语言:javascript
复制
//Load Page, find items

如果我可以大胆地猜测一下,您可能会这样做:

代码语言:javascript
复制
$items[] = "some content";
$items[] = "some content";

不使用常量,但关键是您在等号之前写的内容。每次都是将新项添加到数组的末尾,因此第一次从第一页开始添加项。第二次将第二个页面的内容添加到该数组中时,这两个页面都包含在数组中。换句话说:您忘记了重置$items。在//Load page, find items的开头添加$items = array(),这样就没问题了。

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

票数 1
EN

Stack Overflow用户

发布于 2010-08-27 04:58:18

编辑:我认为你的问题在于你没有在每次循环时清除$items数组。

我测试了以下代码:

代码语言:javascript
复制
$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/>";
}

我得到了以下输出:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3579422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档