php判断时间段交集数量,请问如何有效判断几组数据范围是否有交集

Array

(

[0] => Array

(

[0] => 2000

[1] => 4000

)

[1] => Array

(

[0] => 4000

[1] => 5000

)

[2] => Array

(

[0] => 5000

[1] => 6000

)

[3] => Array

(

[0] => 6000

[1] => 7000

)

[4] => Array

(

[0] => 7000

[1] => 8000

)

[5] => Array

(

[0] => 8000

[1] => 8500

)

[6] => Array

(

[0] => 8500

[1] => 9000

)

)

真的很迅速,谢谢版主。

我想获得这几组范围数据是否有重复的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)

);

"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是否为空

"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是否为空

array_intersect_assoc

这个二维数组没法判断啊,

而且需要这种情况,不属于交集范围的。

array(

array(2000, 3000),

array(3000, 4000),

array(4000, 5000)

);

你不会变通一下吗?

如果原始数组有重复,那么生成的无重复数组就一定比原始数组大

求出具体范围按版主的程序

唉,单纯求true,false不就更简单了:

把任意两项的最小值跟另一项最大值比较就是了,一旦有交集->break循环,如果直到循环结束,就是无交集

你不会变通一下吗?

如果原始数组有重复,那么生成的无重复数组就一定比原始数组大

谢谢版主。

通过重新排序,重新生成新的无重复数组,

如果这个无重复数组元素个数发生变化,代表原始数组是有交集的,对吗?

像以下这两种情况似乎无法正确判断flag

$a = array(

array(5000, 7000),

array(6000, 8200),

array(8000, 9000)

);

$a = array(

array(5000, 5500),

array(6000, 6500),

array(8000, 8500)

);

还有没有更有效的方法呢。

只需要判别是否包含,可以写成函数

还是沿袭开始的思路$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;}

只需要判别是否包含,可以写成函数

还是沿袭开始的思路$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;}

这句话太美妙了。多谢版主大人。

array_search($v[0], $r) != array_search($v[1], $r) - 1

以上代码我再把

array(

array(2000, 3000),

array(3000, 4000),

array(4000, 5000)

);

的情况考虑进去就可以大功告成了。

非常感谢。m( _ _ )m

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值