2017-04-21 50 views
1

出於某種原因stripos不具有所期望的影響我認爲應該有。PHP - 如果字符串的一部分相匹配的字符串,然後

什麼即時試圖做的,是如果變量內容部分匹配另一個則覆蓋該變量。

<?php 
    $street = 'Lightbowne Road'; 
    $addresline1 = '284 Lightbowne Road '; 
    $addresline2 = 'Lightbowne Road '; 
    $addresline3 = '284 Lightbowne Road'; 
    $addresline4 = 'jim '; 
    $addresline5 = 'Lightbowne Road'; 
    if ( stripos($street, $addresline1) !== false) { 
     $addresline1 = 'addresline1 '; 
    } 
    if ( stripos($street, $addresline2) !== false) { 
     $addresline2 = 'addresline2 '; 
    } 
    if ( stripos($street, $addresline3) !== false) { 
     $addresline3 = 'addresline3 '; 
    } 
    if ( stripos($street, $addresline4) !== false) { 
     $addresline4 = 'addresline4 '; 
    } 
    if ( stripos($street, $addresline5) !== false) { 
     $addresline5 = 'addresline5 '; 
    } 
    $addresslines = $addresline1.$addresline2.$addresline3.$addresline4.$addresline5; 
    $streetcomp = trim($street.' '.$addresslines); 

echo '<p><strong>street:</strong> '.$street.'</p>'; 
echo '<p><strong>addresline1:</strong> '.$addresline1.'</p>'; 
echo '<p><strong>addresline2:</strong> '.$addresline2.'</p>'; 
echo '<p><strong>addresline3:</strong> '.$addresline3.'</p>'; 
echo '<p><strong>addresline4:</strong> '.$addresline4.'</p>'; 
echo '<p><strong>addresline5:</strong> '.$addresline5.'</p>'; 
echo '<p><strong>streetcomp:</strong> '.$streetcomp.'</p>'; 

?> 

因此,對於上面的代碼所需的輸出應該是:

street: Lightbowne Road 

addresline1: addresline1 

addresline2: addresline12 

addresline3: addresline3 

addresline4: jim 

addresline5: addresline5 

,但它不弄出來的:

street: Lightbowne Road 

    addresline1: 284 Lightbowne Road 

    addresline2: Lightbowne Road 

    addresline3: 284 Lightbowne Road 

    addresline4: jim 

    addresline5: addresline5 

因此,它基本上只是在做一個精確匹配。我們不想要的。

回答

3

緬懷其順序參數在PHP中去,就像是一針

manual for stripos()標記它的參數爲string $haystack , string $needle尋找一個草堆;也就是說,它搜索在第一參數中的參數。

所以,你有你的論點圍繞着錯誤的方法:if ( stripos($addresline1, $street) !== false) {

它工作時的字符串是相同的,因爲如果$a是相同的$b,然後$a包含$b$b包含$a,所以它會找到它無論你如何放置參數。

+0

謝謝你的第二雙眼睛。將在10分鐘內接受 – DCdaz

1

所有您需要做的是地方從兩個參數在stripos函數改變。此代碼將爲您提供預期的輸出。

參考:http://php.net/manual/en/function.stripos.php

stripos函數查詢內的第二內側第一,不是第一第二個參數。

<?php 
    $street = 'Lightbowne Road'; 
    $addresline1 = '284 Lightbowne Road '; 
    $addresline2 = 'Lightbowne Road '; 
    $addresline3 = '284 Lightbowne Road'; 
    $addresline4 = 'jim '; 
    $addresline5 = 'Lightbowne Road'; 
    if ( stripos($addresline1, $street) !== false) { 
     $addresline1 = 'addresline1 '; 
    } 
    if ( stripos($addresline2, $street) !== false) { 
     $addresline2 = 'addresline2 '; 
    } 
    if ( stripos($addresline3, $street) !== false) { 
     $addresline3 = 'addresline3 '; 
    } 
    if ( stripos($addresline4, $street) !== false) { 
     $addresline4 = 'addresline4 '; 
    } 
    if ( stripos($addresline5, $street) !== false) { 
     $addresline5 = 'addresline5 '; 
    } 
    $addresslines = $addresline1.$addresline2.$addresline3.$addresline4.$addresline5; 
    $streetcomp = trim($street.' '.$addresslines); 

echo '<p><strong>street:</strong> '.$street.'</p>'; 
echo '<p><strong>addresline1:</strong> '.$addresline1.'</p>'; 
echo '<p><strong>addresline2:</strong> '.$addresline2.'</p>'; 
echo '<p><strong>addresline3:</strong> '.$addresline3.'</p>'; 
echo '<p><strong>addresline4:</strong> '.$addresline4.'</p>'; 
echo '<p><strong>addresline5:</strong> '.$addresline5.'</p>'; 
echo '<p><strong>streetcomp:</strong> '.$streetcomp.'</p>'; 

?> 
相關問題