5000~7000
2000~6000
8000~9000
4000~8500
5000~7000
请问php中这几组随机的数据怎么样更有效的判断是否有重复?期望值是
2000~4000
4000~5000
5000~6000
6000~7000
7000~8500
8500~9000php

解决方案 »

  1.   

    本帖最后由 xuzuning 于 2013-10-09 09:00:13 编辑
      

  2.   

    真的很迅速,谢谢版主。我想获得这几组范围数据是否有重复的flag,
    有重复返回false,
    无重复返回true,
    不需要生成新的无重复的数组。
    array(
      array(5000, 7000),
      array(2000, 6000),
      array(8000, 9000),
      array(4000, 8500),
      array(5000, 7000),
    );以下这种情况无重复,期望返回true
    array(
      array(2000, 3000),
      array(3000, 4000),
      array(4000, 5000)
    );
      

  3.   

    <?php
    $array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
    $array2 = array("a" => "green", "b" => "yellow", "blue", "red");
    $result_array = array_intersect_assoc($array1, $array2);
    print_r($result_array);
    ?>判断$result_array是否为空
      

  4.   


    array_intersect_assoc
    这个二维数组没法判断啊,
    而且需要这种情况,不属于交集范围的。
    array(
      array(2000, 3000),
      array(3000, 4000),
      array(4000, 5000)
    );
      

  5.   

    求出具体范围按版主的程序
    唉,单纯求true,false不就更简单了:
    把任意两项的最小值跟另一项最大值比较就是了,一旦有交集->break循环,如果直到循环结束,就是无交集
      

  6.   


    谢谢版主。
    通过重新排序,重新生成新的无重复数组,
    如果这个无重复数组元素个数发生变化,代表原始数组是有交集的,对吗?像以下这两种情况似乎无法正确判断flag
    $a = array(
      array(5000, 7000),
      array(6000, 8200),
      array(8000, 9000)
    );$a = array(
      array(5000, 5500),
      array(6000, 6500),
      array(8000, 8500)
    );还有没有更有效的方法呢。
      

  7.   

    只需要判别是否包含,可以写成函数
    还是沿袭开始的思路$a = array(
      array(5000, 7000),
      array(2000, 6000),
      array(8000, 9000),
      array(4000, 8500),
      array(5000, 7000),
    );
    var_dump(foo($a)); //bool(false)$a = array(
      array(5000, 7000),
      array(6000, 8200),
      array(8000, 9000)
    );
    var_dump(foo($a)); //bool(false)$a = array(
      array(5000, 5500),
      array(6000, 6500),
      array(8000, 8500)
    );
    var_dump(foo($a)); //bool(true)function foo($a) {
      $r = array_unique(call_user_func_array('array_merge', $a));
      sort($r);  foreach($a as $v) {
        if(array_search($v[0], $r) != array_search($v[1], $r) - 1) return false;
      }
      return true;
    }
      

  8.   

    这句话太美妙了。多谢版主大人。
    array_search($v[0], $r) != array_search($v[1], $r) - 1以上代码我再把
    array(
      array(2000, 3000),
      array(3000, 4000),
      array(4000, 5000)
    );
    的情况考虑进去就可以大功告成了。
    非常感谢。m( _ _ )m