相同字符串的长度不同

时间:2013-01-09 06:52:49

标签: php mysql string excel compare

我为相同的字符串

获得两个不同的计数值
 $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),第二个值是在执行Select查询后从Mysql表获取 ,我无法进行比较,因为两者的长度不同。

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

如何让它具有相同的长度,以便我可以比较它。

2 个答案:

答案 0 :(得分:4)

不是您问题的直接答案,但我们首先要了解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编码。

我得到了
string(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

由于该字符串值的数据源是Excel表格,因此最简单的解决方案可能是使用mb_convert_encoding()来更改编码。

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

答案 1 :(得分:3)

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

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

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