0

我得到同一个字符串的两个不同的计数值

 $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 ";   
}

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

4

2 回答 2

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 编码的。

我越来越像
字符串(22)“EP2153814A1”字符串(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');
于 2013-01-09T06:58:41.620 回答
3

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

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

if(trim($val1)==$va2)
{
    echo "Found it ";   
}
于 2013-01-09T06:59:26.923 回答