同一个string的长度不同

我得到两个不同的计数值为相同的string

$val1 = $data->sheets[0]['cells'][5][1];//thise value is from excel sheet $val2 = $obj->number; // this is the value from database var_dump(trim($val1)) , var_dump(trim($val2)) string(19) "US5922335A" , string(10) "US5922335A" 

第一个值是从Excel表(xls)和第二个值是从MySQL表中得到后,执行Select查询,我无法进行比较,因为两者都有不同的长度。

 if($val1==$va2) { echo "Found it "; } 

我怎样才能让它有相同的长度,以便我可以比较它。

不是对你的问题的直接回答,而是让我们先来看看这个string(19) "US5922335A"背后的真实string(19) "US5922335A" 。 请尝试

 foreach(array($val1,$val2) as $v ) { for($i=0; $i<strlen($v); $i++) { printf('%02x ', ord($v[$i])); } echo "<br />\n"; } if($val1==$val2) { echo "Found it "; } 

并添加应该是类似的输出

 55 53 35 39 32 32 33 33 35 41 <br /> 55 53 35 39 32 32 33 33 35 41 <br /> 

对你的问题。


编辑:您的数据似乎是小尾巴UCS-2 / UTF-16编码。

我越来越像

  (22)“EP2153814A1”string(10)“US5922335A”
 45 00 50 00 32 00 31 00 35 00 33 00 38 00 31 00 34 00 41 00 31 00
 55 53 35 39 32 32 33 33 35 41 

由于该string值的数据源是Excel工作表,因此最简单的解决scheme可能是使用mb_convert_encoding()更改编码。

 $val1 = $data->sheets[0]['cells'][5][1]; $val1 = mb_convert_encoding($val1, 'ISO-8859-1', 'UTF-16LE'); 

我敢打赌,Mysql表将列定义为char而不是varchar 。 如果是这样,这意味着第一个值有尾随空格。

在进行相等性检查之前,您需要删除尾随空格。

 if(trim($val1)==$va2) { echo "Found it "; }