【问题标题】:PHP arrays & nested loopsPHP 数组和嵌套循环
【发布时间】:2010-08-26 20:55:15
【问题描述】:

我有一个 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 

关于我做错了什么有什么想法吗?我觉得这是一个简单的错误,我只是没有看到它。

【问题讨论】:

  • 这些人可能是对的,您需要添加“//加载页面,查找项目”的代码以获得任何真正的答案。

标签: php arrays loops


【解决方案1】:

问题出在这段代码中:

//Load Page, find items

如果我大胆猜测一下,您可能正在做类似的事情:

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

不是常量,但关键是你在等号之前写的。一直以来,您都在将新项目添加到数组的末尾,因此您第一次拥有第一页中的项目。第二次将第二页的内容添加到其中时,数组中有 bothboth。换句话说:您忘记重置 $items。在//Load page, find items开头加上$items = array()就可以了。

如果您来自另一种语言,则问题可能用更专业的术语更好地解释:在 php 代码块中不要创建新范围。基本上只有函数可以。

【讨论】:

    【解决方案2】:

    编辑:我相信你的问题是你没有在每次循环时清除 $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
    

    【讨论】:

      猜你喜欢
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      相关资源
      最近更新 更多