我为相同的字符串
获得两个不同的计数值 $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 ";
}
如何让它具有相同的长度,以便我可以比较它。
答案 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 ";
}