如何比较2个数字字符串

时间:2018-01-31 10:15:51

标签: php arrays compare

我有两个像这样的字符串

$s1

我需要比较$s2$s1_ar=explode(".",$s1); $s2_ar=explode(".",$s2); $result=array_diff($s1_ar,$s2_ar); $rt1=5-count($result); if($result>=2){ echo "YES"; } else {echo "no"; } ,并找出是否有2个或更多共同的数字。

我正在使用这种方式

$s1

由于我需要数百万$s2local[*]的值并且上面的代码似乎很慢,您是否知道更快地执行工作的替代方法?

4 个答案:

答案 0 :(得分:0)

我使用以下代码测试了它,在我3岁的笔记本电脑上测试了一百万次,不到两秒钟。

循环1M次没时间,大部分时间用于显示。

注释显示,1M循环,0.816432秒

将结果保存到文件中,~13.564MB,0.731708秒

ob_start();
$t1 = microtime();
for($i=1; $i<=1000000; $i++) {
  $s1="32.56.86.90.23";
  $s2="10.25.30.90.10";
  $s1_ar=explode(".",$s1);
  $s2_ar=explode(".",$s2);
  $result=array_diff($s1_ar,$s2_ar);
  $rt1=5-count($result);
  if($result>=2){ echo $i . " YES<br>"; } else {echo $i .  " no<br>"; }
}

$out = ob_get_contents();

ob_end_clean();

var_dump($out);

echo '<p>'.(microtime() - $t1).'</p>';

答案 1 :(得分:0)

我想到了一种以2 * n复杂度解决这个问题的方法: 我们循环一个列表并从它的元素(LIST c)创建一个关联数组然后我们循环第二个列表并查找列表c是否包含这样的索引/键(c [element])。 这应该是非常轻的:

$commons = 0;

$s1_fliped = array_flip($s1_ar)

foreach($s2_ar as $s2_el){
    if ( isset($s1_fliped[$s2_el]) ){
        $commons ++;
    }
    if($commons >=2) break;
});

答案 2 :(得分:0)

试试这个。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans.xsd
 http://www.springframework.org/schema/mvc
 http://www.springframework.org/schema/mvc/spring-mvc.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context.xsd">

   <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/jsp/" />
      <property name="suffix" value=".jsp" />
   </bean>
  <!--  <bean id="reg" class="pgdac.RegHib"></bean> -->
   <context:component-scan base-package="dac" />


</beans>

我认为它会解决你的目的。

答案 3 :(得分:0)

查看:php array_intersect() efficiency

有人提到array_intersect_key可能更有效率。但是真的有数据和版本比较结果会很好。

$s1 = "2.3.5.7.9.11.13.17";
$s2 = "2.3.4.5.6";

$s1 = array_flip(explode('.', $s1));
$s2 = array_flip(explode('.', $s2));

echo count(array_intersect_key($s1, $s2))>=2 ? 'yes' : 'no';

输出:

yes