时间:2021-07-01 10:21:17 帮助过:5人阅读
$a = array( array(5000, 7000), array(2000, 6000), array(8000, 9000), array(4000, 8500), array(5000, 7000),);$r = array();foreach($a as $v) { $r[] = $v[0]; $r[] = $v[1];}$r = array_unique($r);sort($r);$a = array();for($i=0; $iArray
(
[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