2016-07-18 20 views
1

刪除字符串我要搜索一個數組中包含「新」,「紐約」,「其他」的「東西」, 話並結合只有那些做了狀態的話。從PHP數組

在本例中,我想在陣列中要被組合用於狀態的匹配:

從這:

<?php 
$states = array("new york", "Nevada"); 
$names = array("something", "green", "something", "yellow", "new", "york", "new","jersey"); 

向該:

$names = ("something", "green", "something", "yellow", "new york", "new jersey"); 

因此改變的名稱數組來組合狀態。

+2

在您的例子,它是如何知道要創建*新澤西*?如果'$ states'數組包含了所有50個州,它怎麼會知道**新**是否適用於*紐約*或*新澤西*? – iainn

+1

應該在州數組中有新澤西州嗎?我有你的邏輯嗎? – Whencesoever

+0

有兩件事情需要在這裏澄清。 1.我們是否應該只檢查兩個同時存在的數組值?例如:「新」和「約克」,而不是「綠色」和「黃色」,因爲它們不是同時進入的?2.根據我們得到紐約的邏輯嗎?$州沒有紐約州 –

回答

1

之前觀看的解決方案,看看所作的兩個假設:1。 併發數組元素被檢查的$名稱。 2.檢查相對於$國家提出。

$states = array("new york", "Nevada"); 
$names = array("something", "green", "something", "yellow", "new", "york", "new","jersey"); 
foreach($names as $k => $v) { 
    $combined_names = $names[$k]." ".$names[$k+1]; 
    if (in_array($combined_names, $states)) { 
     $names[] = $combined_names; 
     $names[$k] = $names[$k+1] = ''; 
    } 
} 
$result = array_values(array_filter($names)); 

輸出:

Array 
(
    [0] => something 
    [1] => green 
    [2] => something 
    [3] => yellow 
    [4] => new 
    [5] => jersey 
    [6] => new york 
) 
0

假設你能解決註釋中的「新澤西」的問題,下面將單詞的一個陣列映射到目標陣列(在這種情況下狀態)。結果數組然後被去重複並重新索引。

如果名稱只需要匹配目標字符串中的整個單詞,則可以將stripos測試更改爲更高級的preg_match;

<?php 
$states = array("new york", "Nevada"); 
$names = array("something", "green", "something", "yellow", "new", "york", "new","jersey"); 

$result = array_map(function ($e) use ($states) { 
    foreach ($states as $state) { 
     // The moment a match is found, return it 
     if (stripos($state, $e) !== false) 
     { 
      return $state; 
     } 
    } 

    // If no match was found, fall back to the word in the original array 
    return $e; 
}, $names); 

print_r(array_values(array_unique($result))); 

=

Array 
(
    [0] => something 
    [1] => green 
    [2] => yellow 
    [3] => new york 
    [4] => jersey 
) 
+0

抱歉,不,我想只是把它結合在一個國家的任何地方...所以合併所有的州名,如果它們彼此相鄰 –