【问题标题】:check whether the next row is a duplicate检查下一行是否重复
【发布时间】:2013-09-24 09:40:55
【问题描述】:

如何检查下一行是否重复。如果重复,它将移动到下一行。

例子:

1st row: 1900
2nd row: 1900
3rd row: 2000

mysql和php怎么能做到这些结果:

1st row: 1900
2nd row: 2000
3rd row: 1900

这是可能的还是任何可能的代码?

<?php
$array   =  array(1900,1900,2000);

$checkDuplicates = array_diff($array);

print_r($checkDuplicates);

?>

接下来如何移动重复的行?

【问题讨论】:

  • 请提供您目前拥有的代码

标签: php mysql duplicates


【解决方案1】:

您可以将最后一行存储在临时变量 $last 中,并在 foreach 循环中执行以下操作:

$last = '';
foreach ($array as $row){
    if ($row== $last){
        continue;
    } else {
        $returnArray[] = $row;
    }
    $last = $row;
}
var_dump($returnArray);

【讨论】:

    【解决方案2】:

    您可以使用array_unique 来获得唯一的结果,然后在初始数组和唯一数组之间执行array_diff 以获取加倍的 id,以便将它们用于 sql 查询以整理该表:

    $uniquified = array_unique($initalResults);
    $diff = array_diff($initalResults, $uniquified);
    

    【讨论】:

    • 刚刚注意到,您想要实现不同的目标
    【解决方案3】:

    你可以使用 array_unique

    http://php.net/manual/en/function.array-unique.php

    提取唯一记录,然后 array_diff 提取重复记录

    【讨论】:

    • OP 想要:如何检查 next 行是否重复。只有下一个
    【解决方案4】:

    您需要堆叠具有唯一值的第二个数组。

    <?php
    $array   =  array(1900,1900,2000);
    $array2  =  array();
    
    foreach ($array as $val) {
        if (!in_array($val, $array2)) {
            $array2[] = $val;
        }
    }
    
    print_r($array2);
    

    查看键盘:http://codepad.org/X8jtnEkq

    如果你想重复追加到数组的末尾,在上面的脚本之后,使用array_merge($array2, $array);

    <?php
    $array   =  array(1900,1900,2000);
    $array2  =  array();
    
    foreach ($array as $key => $val) {
        if (!in_array($val, $array2)) {
            $array2[] = $val;
            unset($array[$key]);
        }
    }
    $array = array_merge($array2, $array);
    print_r($array);
    

    演示http://codepad.org/tRC6P2Go

    【讨论】:

    • hi dan,重复号码呢?它显示数组( [0] => 1900 [1] => 2000 )。我想要的是副本也将被包括在内,并将像这个例子一样移动到第三次迭代:Array([0] => 1900 [1] => 2000 [2] => 1900)
    • @EdmarCruz 但我的示例将移动所有重复项,而不仅仅是下一行。如果您只想要下一行,请结合我的和亚当的解决方案。
    【解决方案5】:

    这道题是初等编程题,一般在大学第一周都会遇到这样的题。

    array_diff 对你没有帮助,它比较两个不同的数组,而你正在寻找一个数组中前一个元素的比较。

    无论是来自 mysql 还是数组,都适用相同的原则。

    另外,问自己一个问题,这些数据需要先排序吗?

    试试这个

    <?php
    
    $my_array = array(1900,1900,2000);
    
    $tmp = null ;
    
    for( $i = 0 ; $i<count($my_array) ; $i++) {
        if( $my_array[$i] != $tmp ){
            echo "\nValue $i is different to the last one, 
                  should I do extra stuff here ?";
        } else {
            echo "\nValue $i is the same as the last one and equals $tmp";
        }
        $tmp = $my_array[$i] ; 
    
    }
    
    
    ?>
    

    上面代码的输出是..

    Value 0 is different to the last one, should I do extra stuff here ?
    Value 1 is the same as the last one and equals 1900
    Value 2 is different to the last one, should I do extra stuff here ?
    

    判断动作是否发生在第一个条目上很简单,检查$i的值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      • 1970-01-01
      • 2014-03-15
      相关资源
      最近更新 更多