如何在foreach循环中检查重复值

时间:2019-04-12 05:15:28

标签: php

我在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函数。但是重复的副本仍然存在。

4 个答案:

答案 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
        )

    )