2011-12-10 68 views
-1

正如您在下面看到的,我正在浏览一个名为$ subLinks的数组,将每个数据作为$ subLink并将其添加到名为$ linkArray的数组中,如果它尚未存在。Foreach循环不附加到数组

但是,在循环的每次迭代中,$ linkArray都被清除并从头开始。因此,例如在每个循环结束时,$ linkArray回显链接列表,并在第二个循环中清除链接列表,并用下一个$ subLink链接替换。

我的目标是用含有每$ SUBLINK一个大阵列落得 - 没有重复,

$linkArray = array(); 
    foreach($subLinks as $subLink){ 

     # Validate and clean the links found 
     $subLink = cleanUrl($url,$subLink); 

     if(!in_array($subLink,$linkArray)){ 
     $linkArray[2] = $subLink; 
     } 

     echo($linkArray[2].'<br />'); 
     flushOutputBuffer(); 

    } 

什么是呼应的一个例子是:

link1 
link2 
link3 

在下一个循环,这是呼应:

link1 
link2 
link3 

我想,如果它不是重复,要添加到数组,如此

link1 
link2 
link3 
link4 
link5 

任何帮助,在这里真的很感激,

感谢

更新:数组似乎后110元复位,并覆盖前一个条目

回答

2

你总是分配新的链接[2]并一遍又一遍覆盖[2]的内容,请改为:

//... 
if(!in_array($subLink, $linkArray)){ 
    $linkArray[] = $subLink; 
} 
//... 

这会将新链接追加到数组的末尾。

+0

这仍然不是为我工作,当我在每个循环的最后做了print_r的,它只显示了新链接 – Cristian

1

您没有正确添加项目。为了填充一个数组,你需要写

$linkArray[] = $subLink; // do not specify an index 

当然,这一切都是没有实际意义,因为没有达到相同的结果的好得多方式:

$linkArray = array_unique(array_map(
       function($item) use($url) { return cleanUrl($url, $item); }, $subLinks 
      )); 
+0

嗨再次乔恩!你给我的代码给我的结果是这样的:array_map()期望至少有2个参数,我敢肯定我做错了什么 – Cristian

+0

@ user964145:忘了添加第二个参数,对不起。再看一遍。 – Jon

+0

耶稣的速度差异是荒谬的,但它仍然没有为我工作,我编辑我的初始帖子来显示我的代码根据你的,让我现在我做错了什么 – Cristian

1

嗯,因为你'在每个循环中重写它?你写相同的指数一遍又一遍

如果要追加到索引中,像这样做:

$ yourVar [2] [] = $ valueToAppend

+0

后我重置希望再次追加到同一个索引:) – Cristian

1

你要得到摆脱重复条目,首先将每个子链接添加到链接数组;那么只需使用下面的函数来摆脱任何重复。这是一个单步过程,也是获得数组中唯一数据的最快方法之一。

array_unique()函数删除数组中的重复值。如果两个或多个数组值相同,则第一个外观将保留,另一个将被删除。

语法

Array = array_unique(array) 

最后,你将有 '含每$ SUBLINK一个大阵列 - 没有重复'。

那就是那个。希望这有助于,如果是的话,让我知道。

PK