0

同じ文字列に対して 2 つの異なるカウント値を取得しています

 $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) から取得され、2 番目の値は 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 テーブルが列を ではなく として定義していることは間違いcharありませんvarchar。その場合、最初の値の末尾にスペースがあることを意味します。

等価チェックを行う前に、末尾のスペースを削除する必要があります。

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