2017-11-09 10 views
0

これまでと同様の問題を投稿しましたが、解決策が見つからないため、この問題は狂っています。配列内のEXACT文字列を置換する必要があります

ここで説明します。私が検索し、私はと交換して何のためのキーと値を持つ

$Array1= Array (
     "UK 1.5", 
     "UK 01", 
     "UK 02", 
     "UK 03", 
     "UK 03.5", 
     "UK 04", 
     "UK 04.5", 
     "UK 05", 
     "UK 05.5", 
     "UK 06", 
     "UK 06.5", 
     "10 12 YRS", 
     "12 13 YRS", 
     "13 15 YRS" 
); 

そして、この配列:

$marGeneral = Array(
     'SELECT SIZE' => '', 
     "09 10 YRS" => "9-10 ANI", 
     "11 12 YRS" => "11-12 ANI", 
     "13 14 YRS" => "13-14 ANI", 
     "15 16 YRS" => "15-16 ANI", 
     'WAIST' => 'TALIE', 
     'YRS' => 'ANI', 
     "UK 1.5" => "34", 
     "UK 01" => "32", 
     "UK 02" => "33", 
     "UK 03" => "35", 
     "UK 03.5" => "36", 
     "UK 04" => "36.5", 
     "UK 04.5" => "37", 
     "UK 05" => "38", 
     "UK 05.5" => "38.5", 
     "UK 06" => "39", 
     "UK 06.5" => "40", 
     "UK 07" => "40.5", 
     "UK 07.5" => "41", 
     "UK 08" => "42", 
     "UK 08.5" => "42.5", 
     "06" => "XS", 
     "08" => "S", 
     "10" => "M", 
     "12" => "L", 
     "14" => "XL"); 

私の関心は、私が行う方法です私はこのような配列のサイトからいくつかの値をこすりスクレーパーが配列値12 13 YRSを返した場合など、競合することなく値を置き換えてください。これは検索でキーとして定義されていませんか?この場合、は12が既に変換する別の値であるが、文字列ではなく単独である場合に限り、12 13 YRSの代わりに私の値L 13 YRSを返すためです。定義されていない場合は、それが唯一の数値12でなければ干渉しないはずです。

私はpreg_replace()str_replace()strtr()で試しましたが、運はありません。

アイデア?前もって感謝します。

+0

文字列にサイズの開始/終了がなければ不可能です。文字列の読み方に関するいくつかの規則を定義する必要があります。作業に問題の文字列を与え、テキストをどのように読むのかを教えてください。好ましくは本物のものに近いところにあるようにしてください。 – Andreas

+0

'12 13 YRS'とは何が起こっていますか? '12 13 ANI'? – Andreas

+0

'12 13 YRS'は定義されていても定義されていない場合は' 12 13 ANI'になります。その場合、検索ではこれらの文字列の数値が置き換えられますが、これは不要です。 –

答えて

0

おそらく$marGeneralを交換機能の中に入れているからです。 $keyが置換文字列検索で、$valueが置換文字である限り、この「エラー」が発生します。

これを試してみてください:

array_walk(
    $Array1, 
    function (&$size) use ($marGeneral) { 
     if (array_key_exists($size, $marGeneral)) { 
      $size = $marGeneral[$size]; 
     } 
    } 
); 

私はあなたのデータベース内ではなく、そこにそれがあることを行うことをお勧めします。

0

部分的な文字列置換の代わりに完全一致を行いたい場合があります。ここに私の冗長ソリューションです:私たちは、大文字小文字を区別しないようにしたい場合は

foreach ($Array1 as &$value) { 
    if (isset($marGeneral[$value])) { 
    $value = $marGeneral[$value]; 
    } 
} 
unset($value); 

、我々はループの前に上部または下部ケースにすべての単語を変更する必要があります。

+0

array_key_exists()はisset()よりもはるかに低速です。そして、ここには違いはありません。 – paulz

関連する問題