2014-03-24 88 views
0
$states = "Mississippi Alabama Texas Massachusetts Kansas"; 
$statesA = explode(' ',$states); 
$statesArray = array(); 

foreach($statesA as $state) { 
if(preg_match('/xas$/', trim($state))) 
$statesArray[0] = trim($state); 
} 

foreach($statesA as $state) { 
if(preg_match('/^k.*s$/i', trim($state))) 
$statesArray[1] = trim($state); 
} 

foreach($statesA as $state) { 
if(preg_match('/^M.*s$/', trim($state))) 
$statesArray[2] = trim($state); 
} 

foreach($statesA as $state) { 
if(preg_match('/a$/', trim($state))) 
$statesArray[3] = trim($state); 
} 

foreach($statesA as $state) { #PROBLEM HERE 
if(preg_match('/^M/', trim($state))) 
$statesArray[4] = trim($state); 
} 

foreach ($statesArray as $element => $value) 
print("Element $element of the Array is $value <br />"); 

任務是基本上輸出一個以變量狀態字母M開頭的單詞。我有"Mississippi Alabama Texas Massachusetts Kansas"$states。當我嘗試打印出來時,Massachusetts被打印出來而不是Mississippi。這是爲什麼?如何通過搜索將字符串放入數組中然後輸出它?

+0

好吧,'馬薩諸塞州'是最後一個匹配的元素,覆蓋了'密西西比河'的前一場比賽。 –

回答

2
<? 
foreach($statesA as $state) { #PROBLEM HERE 
    if(preg_match('/^M/', trim($state))) 
    $statesArray[4] = trim($state); 
    } 
?> 

在上面代碼中,無論是馬薩諸塞州和密西西比州符合您的表達,並且它們都存儲在$statesArray[4]。如果你只想要第一場比賽,也許你還應該檢查$statesArray[4]是否已經設置。所以,這樣的事情應該工作:

<? 
    foreach($statesA as $state) { #PROBLEM HERE 
    if(preg_match('/^M/', trim($state)) && !isset($statesArray[4])) 
    $statesArray[4] = trim($state); 
    } 
?> 

這將填補$statesArray[4]只有當它尚未設置。

讓我知道這是否適合你。

+0

這實際上並不能完成任何事情。 –

+0

你能說清楚你的意思嗎? –

+0

這個特定的表達/^M.*s$/是搜索一個以M開頭並以S結尾的詞,即馬薩諸塞州。它不應該與密西西比相匹配,因爲它不以S結尾。對於每一個的最後一個的目的是能夠打印出以M開頭的第一個單詞,即在這種情況下是密西西比。語法錯了嗎?感謝您的幫助! – Shinji

相關問題