在循环中跳过数组中的重复值


skip duplicate values in array in loop

我有一个分类为已读书籍和未读书籍的序列号数组。当有书被读取时,我将read放在数组的序列号后面,如下所示。

array(
"1234567890","read",
"2345678901","read",
"2345678901",
"2345678901",
"1234561231",
"3333333333","read",
"3333333333"
)

status为未读状态我的代码如下所示。

$scannedbook=array("0075423658","0012366321","read","0012366321","0012366321","0012366321","0132546874","read","0132546874");
$lenghtofarray = count($scannedbook);
$readbook = "0";
$unreadbook = "0";
for ($x = 0; $x <= $lenghtofarray-1; $x++) {
    if($scannedbook[$x] == 'read'){
        continue ;
    }
    if($scannedbook[$x+1] == 'read'){
        $readbook++;
        for($i=$x; $i<$lenghtofarray-1; $i++){
            if($scannedbook[$x] == $scannedbook[$i+1]){
             $unreadbook++;
            }
        }   
    }
    else{
        $unreadbook++;
    }
echo $scannedbook[$x]." readbook=".$readbook."unreadbook=".$unreadbook."<br />";
        $readbook = "0";
        $unreadbook = "0";
}

输出是

1234567890: 0 unread, 1 read 
2345678901: 2 unread, 1 read 
2345678901: 1 unread, 0 read 
2345678901: 1 unread, 0 read 
1234561231: 1 unread, 0 read 
3333333333: 1 unread, 1 read 
3333333333: 1 unread, 0 read 

我只需要跳过那些重复的值,如果他们已经检查了像第3,第4和第7粗体值,需要这样的结果

    1234567890: 0 unread, 1 read
    2345678901: 2 unread, 1 read
    1234561231: 1 unread, 0 read
    3333333333: 1 unread, 1 read

Try This

<?php
$scannedbook=array("0075423658","0012366321","read","0012366321","0012366321","0012366321","0132546874","read","0132546874");
$lenghtofarray = count($scannedbook);
$readbook = "0";
$unreadbook = "0";
$dummyArray=array();
for ($x = 0; $x <= $lenghtofarray-1; $x++) {
    if($scannedbook[$x] == 'read'){
        continue ;
    }
    if($scannedbook[$x+1] == 'read'){
        $readbook++;
        for($i=$x; $i<$lenghtofarray-1; $i++){
            if($scannedbook[$x] == $scannedbook[$i+1]){
             $unreadbook++;
            }
        }   
    }
    else{
        $unreadbook++;
    }
    if(!in_array($scannedbook[$x],$dummyArray))
    {
    echo $scannedbook[$x]." readbook=".$readbook."unreadbook=".$unreadbook."<br />";
    array_push($dummyArray,$scannedbook[$x]);
    }
        $readbook = "0";
        $unreadbook = "0";
}
?>

您可以尝试使用PHP函数array_unique()从数组中删除重复的值。它是这样工作的。

$input = array(4, "4", "3", 4, 3, "3");
$result = array_unique($input);
var_dump($result);

输出将是。

array(2) {
  [0] => int(4)
  [2] => string(1) "3"
}

添加到输出前

if (!isset($arr[$readbook][$unreadbook])) {
    $arr[$readbook][$unreadbook] = 1;
} else {
   $readbook = "0";
   $unreadbook = "0";
   continue;
}