版本对比函数PHP

先来个从字符串中抽出数字的函数(必写)

public function getVersonArr($str)
	{
		$temp=array('0','1','2','3','4','5','6','7','8','9');
		// $temp1=array('零','一','二','三','四','五','六','七','八','九');
		$len = strlen($str);
		$new_str = [
			'connector' => '',
			'verson' => ''
		];
		for($i=0;$i<$len;$i++)
		{
			if(in_array($str[$i], $temp))
			{
				$new_str['verson'] .= $str[$i];
				if(!empty($str[$i+1]) && !in_array($str[$i+1], $temp)){
					$new_str['connector'] = $str[$i+1];
					$new_str['verson'] .= $str[$i+1];
					$i++;
				}
			}
			// else if(in_array($str[$i], $temp1))
			// {
				// $new_str['verson'] .= $temp1[$str[$i]];
				// if(!empty($str[$i+1]) && !in_array($str[$i+1], $temp)){
					// $new_str['connector'] = $str[$i+1];
					// $new_str['verson'] .= $str[$i+1];
					// $i++;
				// }
			// }
		}
		return $new_str;
	}


然后是正文,比较版本,我还预想的了中文,被我注释掉了,因为中文字符不算一个string,以后有实际需求再优化

public function getFirst($v1, $v2)
	{
		$num1 = $this->getVersonArr($v1);
		$num2 = $this->getVersonArr($v2);
		$l1  = explode($num1['connector'],$num1['verson']);
		$l2  = explode($num1['connector'],$num2['verson']);
		$len = count($l1) > count($l2) ? count($l1): count($l2);
		for($i = 0; $i < $len; $i++) 
		{
			$len1 = strlen($l1[$i]);
			$len2 = strlen($l2[$i]);
			$len_n = $len1<$len2?$len1:$len2;
			for($r = 0;$r<$len_n;$r++)
			{
				if ($l1[$i][$r] > $l2[$i][$r]) 
				{
					echo $v1.'大于'.$v2;//需要更新
					return ;
				} 
				else if ($l1[$i][$r] < $l2[$i][$r]) 
				{
					echo $v1.'小于'.$v2;//不需要更新
					return ;
				}
			}
			if($len1!=$len2)
			{
				echo $len1>$len2?$v1.'大于'.$v2:$v1.'小于'.$v2;//需要更新
				return ;
			}
		}
		echo $v1.'等于'.$v2;
		return ;
	}

思路其实很简单的,就是先把字符串中的数字取出来(数字中间的间隔符记录并放在数字中),把取出的数字(带间隔符)按照间隔符分开,再一一比较,从第一个开始比,每一个从第一位开始比,一直比到最后,没有结果就是等于咯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值