2013-02-03 50 views
-2

我知道这可能是那些“树林中的树木”问题之一,但我一整天坐在这里,我不知道我哪里会出错。即使对于相同的字符串,为什么字符串比较始终返回false?

的情景:

基本上我有一个查询返回的地址结果如下assoc命令阵列,像这样:

Array ([0] => Array ([Address_ID] => 12 [Address_String] => 23 Abledone road Hobs moat Solihull West Midlands B92 4JJ) [1] => Array ([Address_ID] => 13 [Address_String] => 22 Holdean Road Deepcut Surrey KT164NJ) [2] => Array ([Address_ID] => 14 [Address_String] => 32 Palbrough Road Nottingham N32 4NJ) [3] => Array ([Address_ID] => 15 [Address_String] => Flat 2B Gateway House Rutland Street Bearwood Westmidlands B66 9RT) [4] => Array ([Address_ID] => 16 [Address_String] => 258 Lincoln Street Bullworth Street Dundee DD35 9RJ) [5] => Array ([Address_ID] => 17 [Address_String] => 4 Scott Arms Avenue Beckton Hartfordshire H32 7JJ) [6] => Array ([Address_ID] => 18 [Address_String] => 14 Fairfield house Millbank road Bearwood Birmingham Westmidlands B137JJ) [7] => Array ([Address_ID] => 19 [Address_String] => 9 Scott road Olton Solihull Westmidlands B91 7TY) [8] => Array ([Address_ID] => 20 [Address_String] => Normandy House Bunnian Place Basingstoke RG21 7EJ) [9] => Array ([Address_ID] => 27 [Address_String] => 3 New Square Bedfont Lakes Feltham Middlesex TW14 8HB) [10] => Array ([Address_ID] => 28 [Address_String] => No. 1 The Square Temple Quay Bristol BS1 6DG) [11] => Array ([Address_ID] => 29 [Address_String] => The Visual Space Capital Park Fulbourn Cambridge CB21 5XH) [12] => Array ([Address_ID] => 40 [Address_String] => 21 St. Andrew Square Edinburgh Scotland CB21 5XH)) 

和所有我想要做的是匹配这些结果与搜索字符串看看地址是否已经在我的数据库中。

我的代码如下:

public function addressExistsByString ($searchAddrString, $asJSON = FALSE) { 
    if (!isset($searchAddrString)) { 
     throw new Exception('The searchAddrString variable of function ' . __FUNCTION__ . ' of class ' . __CLASS__ . 'was empty or set to NULL.'); 
    } elseif (!is_string($searchAddrString)) { 
     throw new Exception('The type of value for the argument addressID of function ' . __FUNCTION__ . ' of class ' . __CLASS__ . ' was ' . gettype($searchAddrString) . ' a string was expected'); 
    }if (!is_bool($asJSON)) { 
     $asJSON = FALSE; 
    } 

    print_r ($addressArray = $this->getAllLocations(FALSE)); 

    if ($addressArray === -1) { 
     return -2; 
    } else { 

     $search = str_replace(',','', strtolower(trim($searchAddrString))); 

     foreach ($addressArray as $record) { 

      $recID = $record ['Address_ID']; 
      $currentAddress =str_replace(',','', strtolower(trim($record['Address_String']))); 

      echo 'Search address: '. $search. ' Current address: '. $currentAddress .' type of current address: '.gettype($searchAddrString).'<br/>'; 

      if ($currentAddress === $search) { 

       if ($asJSON) { 
        echo json_encode($recID); 
       } 
       return intval($recID); 
      } 
     } 
     if ($asJSON) { 
      echo json_encode(-1); 
     } 
     return -1; 
    } 
} 

当我运行这段代码,我得到下面的输出(对不起它有点长,但重要的一点是高亮):

bunnian地方贝辛斯托克rg21 7ej当前地址:23 abledone road hobs护城河solihull west midlands b92 4jj当前地址的类型:字符串 查询地址:normandy house bunnian place basingstoke rg21 7ej当前地址:22 holdean road deepcut surrey kt164nj当前地址的类型:字符串 搜索地址:诺曼底小屋bunnian place basingstoke rg21 7ej当前地址:32 palbrough road nottingham n32 4nj当前地址类型:字符串 搜索地址:诺曼底小屋bunnian place basingstoke rg21 7ej当前地址:flat 2b gateway house rutland street bearwood westmidlands b66 9rt类型的当前地址:字符串 查找地址:诺曼底住所bunnian place basingstoke rg21 7ej当前地址:258 lincoln street bullworth street dundee dd35 9rj当前地址的类型:字符串 查找地址:诺曼底住所bunnian place basingstoke rg21 7ej当前地址:4 scott武器大道贝克顿哈特福德郡h32 7jj类型的当前地址:字符串 查找地址:诺曼底住所bunnian place basingstoke rg21 7ej当前地址:14 fairfield house millbank road熊伯恩伯明翰westmidlands b137jj当前地址的类型:字符串 搜索地址:诺曼底房子bunnian地方贝辛斯托克RG21 7ej当前地址:9斯科特路olton索利赫尔西米德兰兹郡B91 7ty类型的当前地址:串 搜索地址:诺曼底房子bunnian地方贝辛斯托克RG21 7ej当前地址:诺曼底房子bunnian地方贝辛斯托克rg21 7ej当前地址的类型:字符串 搜索地址:诺曼底住宅bunnian place basingstoke rg21 7ej当前地址:3 new square bedfont lakes feltham middlesex tw14 8hb当前地址类型:字符串 查找地址:诺曼底住所bunnian place basingstoke rg21 7ej当前地址号码。 1方形寺码头bristol bs1 6dg类型当前地址:字符串 查找地址:诺曼底小屋bunnian地方basingstoke rg21 7ej当前地址:视觉空间首都公园fulbourn cambridge cb21 5xh当前地址类型:字符串 搜索地址:诺曼底小屋bunnian place basingstoke rg21 7ej当前地址:21 st。安德鲁广场苏格兰爱丁堡CB21 5XH类型的当前地址:串 -1

强调的字符串是完全一样的,我带他们两个如果语句作为普通字符串,并把它们插在一个单独的测试,他们总是返回true。 我试过==,===铸造,字符串值和其他所有我能想到的,但由于某种原因-1总是返回。 我知道它可能是很简单的东西我想念但我只是不能看到它,任何人都可以帮忙吗?

在此先感谢。

+1

检查str长度或将其放入调试器或在'[]'内登录以检查周围的多余空间。 – SparKot

+1

难道你不能把重要的位分离出来,并把它放到它自己的完整程序中来演示你的问题吗?绝大多数问题与问题无关。 –

+0

1)'var_dump'对我们来说是重要的东西2)为什么你要发布这么多不必要的东西,包括你在法律上不允许发布的信息(它们在数据保护法下,因为它们是英国地址)。 3)检查您可能错过的任何行结束符或不可打印字符 – Amelia

回答

1

var_dump()你比较它们之前的两个变量。在此之前回应<pre>标签,以查看浏览器中的所有空白,而无需切换到HTML源代码。

你很可能会错过那里的一些空白字符。

+0

我认为斯文有一个关键的答案:我有这个完全相同的问题,我做了一个var_dump,令我惊讶的是我发现我正在比较两个对象,而不是我认为的两个字符串。 请看这篇文章:http://stackoverflow.com/questions/2867575/get-value-from-simplexmlelement-object 我知道你没有使用XML,但你在那里混合使用JSON。 此外,我看到你正在使用三重平等,当它意味着它将返回true,如果他们是平等的,他们是相同的类型。小心如果一个变量是一个字符串,另一个是别的。 –

相关问题