2016-07-18 6 views
1

"新しい" "ヨーク" "その他" "もの"、 のような単語で配列を検索し、状態の単語を構成するものだけを結合したいと思います。したがって、名前を変更することPHP配列から文字列を取り除く

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

:この例では

、私は状態の一致が配列に結合することにしたい。

このことから:これに

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

配列を使用して状態を結合します。

+2

、それはどのように*ニュージャージー*を作成するために知っているのですか? '$ states'配列に50の州がすべて含まれていれば、* New York *または* New Jersey *に** new **が適用されているかどうかをどのように知ることができますか? – iainn

+1

ニュージャージー州の州の配列がありますか?私はあなたの論理を得ますか? – Whencesoever

+0

ここでは2つのことを明確にする必要があります。 1. 2つの同時配列値のみを調べるべきですか?例えば、 "new"と "york"であり、 "green"と "yellow"ではないので、それらは同時エントリーではないか?2. New Yorkを取得している論理に基づいて$ statesはneworkを持たない –

答えて

1

ソリューションを表示する前に、作られた2つの仮定を見てみましょう。 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

コメント内の "New Jersey"の問題を解決できると仮定すると、次の例では、単語の1つの配列をターゲット配列(この場合は状態)にマップします。その結果得られたアレイは、重複排除され、再索引付けされます。

名前がターゲット文字列の単語全体と一致する必要がある場合は、striposテストをより高度なpreg_matchに変更することができます。 1.並行配列要素が$名でチェックされます

<?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

申し訳ありません、私はそれが国家だったところであればどこにでも結合したいと思っています。 –

関連する問題