2017-08-24 16 views
2

このように、多くのPDFリンク(ファイル)を列挙したページのソースを取得しています。PHP foreachループ内で複数の文字列を置き換えます。

TALB20170826D-$A$$-RA11.pdf 
TAP$20170826D-$A$$-RA11.pdf 
TASD20170826D-$A$$-RA11.pdf 
TAUA20170826D-$A$$-RA11.pdf 
TAUB20170826D-$A$$-RA11.pdf 
TAUC20170826D-$A$$-RA11.pdf 
TAUD20170826D-$A$$-RA11.pdf 
TBTP20170826D-$A$$-RA11.pdf 
TCBY20170826D-$A$$-RA11.pdf 

simple_php_dom.php私は、例えばTALBがALBANYの略ですforeachループ

foreach($html->find('a') as $element) 
echo $element->href; 

内でそれらの名前を変更する必要があり、TAPは、ように、アジア太平洋地域との略称です。

略語に対応する名前のリストがありますが、ループ内で名前を変更する方法がわかりません。どんな助けでも大歓迎です!

答えて

4

あなたは配列内の代替品のリストを置くことができます(順序は重要ではありませんし、不足している項目だけではありません

<?php  
/* 
$list = []; 
$list[] = "TALB20170826D-\$A$$-RA11.pdf"; 
$list[] = "TAP$20170826D-\$A$$-RA11.pdf"; 
$list[] = "TASD20170826D-\$A$$-RA11.pdf"; 
$list[] = "TAUA20170826D-\$A$$-RA11.pdf"; 
$list[] = "TAUB20170826D-\$A$$-RA11.pdf"; 
$list[] = "TAUC20170826D-\$A$$-RA11.pdf"; 
$list[] = "TAUD20170826D-\$A$$-RA11.pdf"; 
$list[] = "TBTP20170826D-\$A$$-RA11.pdf"; 
$list[] = "TCBY20170826D-\$A$$-RA11.pdf"; 
*/ 
$list = $html->find('a'); 
$abbr = [ 
    "TALB", 
    "TAP", 
    // ... 
]; 
$replacements = [ 
    "ALBANY", 
    "Asia Pacific", 
    // ... 
]; 
foreach ($list as &$el) { 
    $el->href = str_replace($abbr, $replacements, $el->href); 
} 

Demo

あるいは、1つの連想配列でそれらのすべてを維持するために交換し、エラーなし):

<?php  
/*$list = []; 
$list[] = "TALB20170826D-\$A$$-RA11.pdf"; 
$list[] = "TAP$20170826D-\$A$$-RA11.pdf"; 
$list[] = "TASD20170826D-\$A$$-RA11.pdf"; 
$list[] = "TAUA20170826D-\$A$$-RA11.pdf"; 
$list[] = "TAUB20170826D-\$A$$-RA11.pdf"; 
$list[] = "TAUC20170826D-\$A$$-RA11.pdf"; 
$list[] = "TAUD20170826D-\$A$$-RA11.pdf"; 
$list[] = "TBTP20170826D-\$A$$-RA11.pdf"; 
$list[] = "TCBY20170826D-\$A$$-RA11.pdf";*/ 
$list = $html->find('a'); 
$abbr = [ 
    "TALB" => "ALBANY", 
    "TAP" => "Asia Pacific", 
]; 
foreach ($list as &$el) { 
    $el->href = strtr($el->href, $abbr); 
} 

Demo

それともあなたはそれを少しクリーナー見つける、array_map()を使用する:略語は順番になっていないか、時々表示されていない場合

$list = array_map(function($el) use($abbr) { 
    return strtr($el, $abbr); 
}, $list); 
+0

この作品は意志を? –

+0

最初の方法ではできませんが、別の方法で編集しています。 – ishegg

+0

それは動作します!今、私はどのようにpdfのリンク名を$ list = []配列に入れますか? たとえば、文字列内の日付はリンクをつかむ毎日変わります。 –

関連する問題