我在foreach循环中有3个这样的数组
$link = 'https://example.com/page/';
$parse = explode('/', $link);
for ($i = 0;$i <= 5;$i++)
{
if($i > 0) {
$link = $parse[0]."//".$parse[1]."/".$parse[2]."/".$parse[3]."/".$parse[4].$i;
$get[$i] = curl($link);
$re = '/class="img-lazy" src="(.*?)"/m';
preg_match_all($re, $get[$i], $matches);
foreach ($matches[1] as $content)
{
echo $content. "\r\n";
}
}
}
(每个页面的循环,例如:example.com/page/1将包含下面的数组,依此类推,第2/3页...)
结果:
Array (Page 1)
(
[0] => https://example.com/img1.jpg
[1] => https://example.com/img2.jpg
)
Array (Page 2)
(
[0] => https://example.com/img3.jpg
[1] => https://example.com/img4.jpg
)
Array (Page 3 nonexist auto redirect to page 1)
(
[0] => https://example.com/img1.jpg
[1] => https://example.com/img2.jpg
)
最后一个重复。如何删除它?
我已经尝试合并array和array_unique函数。但是重复的副本仍然存在。
答案 0 :(得分:1)
如果循环是动态的,快速解决方案仅循环运行5次
我所做的是比较第一个链接。如果重复,则退出。 我检查了,效果很好
您的图像很好:-)
$get = array();
$firstcompare = 0;
$firsttime = 1;
for ($i = 0;$i <= 17;$i++)
{
if($i > 0) {
$dup = $res = [];
$link = $parse[0]."//".$parse[1]."/".$parse[2]."/".$parse[3]."/".$parse[4].$i;
$get[$i] = curl($link);
$re = '/class="aligncenter" src="(.*?)"/m';
preg_match_all($re, $get[$i], $matches);
if($firsttime){
$stringlink = $matches[1][0];
$firsttime = 0;
}
foreach ($matches[1] as $content)
{
if($firstcompare){
if ($stringlink==$content) {
exit;
}else{
// echo $content."\n\n";
echo "<img src=' $content ' /> " . "\r\n";
}
}else{
// echo $content."\n\n";
$firstcompare = 1;
echo "<img src=' $content ' /> " . "\r\n";
}
}
}
}
答案 1 :(得分:1)
您可以按照yourArray这样尝试,希望它会对您有所帮助
使用Foreach:
$dup = $res = [];
foreach($yourArray as $arr){
$imploded = @implode(',',$arr);
if(!in_array($imploded, $dup)){
$dup[] = $imploded;
$res[] = $arr;
}
}
(或)
使用数组函数:
$unique = array_unique(array_map(function($arr){
return @implode(',',$arr);
}, $yourArray));
$mapped = array_map(function($a){
return @explode(',', $a);
}, $unique_data);
答案 2 :(得分:0)
我不是很了解所有内容,但是要删除数组中的重复数据,可以使用array_unique()
函数。
foreach(array_unique($yourArray) as $value):
// Code goes here
endforeach;
它需要数组并返回干净的数组 https://www.php.net/manual/fr/function.array-unique.php
答案 3 :(得分:0)
这是使用PHP或Laravel从多维数组中删除重复值的最佳方法。
解决方案:
$input = array_map("unserialize", array_unique(array_map("serialize", $input)));
$input = Array
(
[0] => Array
(
[0] => abc
[1] => def
)
[1] => Array
(
[0] => ghi
[1] => jkl
)
[2] => Array
(
[0] => mno
[1] => pql
)
[3] => Array
(
[0] => abc
[1] => def
)
[4] => Array
(
[0] => ghi
[1] => jkl
)
[5] => Array
(
[0] => mno
[1] => pql
)
)
$input = array_map("unserialize", array_unique(array_map("serialize", $input)));
输出:
Array
(
[0] => Array
(
[0] => abc
[1] => def
)
[1] => Array
(
[0] => ghi
[1] => jkl
)
[2] => Array
(
[0] => mno
[1] => pql
)
[3] => Array
(
[0] => ghi
[1] => jkl
)
[4] => Array
(
[0] => mno
[1] => pql
)
)