Reputation: 573
I'm grabbing the source of a page with a lot of PDF links (files) listed in a column like so. simple_php_dom.php
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
I need to rename them within the foreach loop
foreach($html->find('a') as $element)
echo $element->href;
For instance TALB is an abbreviation for ALBANY, TAP is an abbreviation for Asia Pacific and so on.
I have a list of the names that correspond with the abbreviations but unsure how to rename them within the loop? Any help would be greatly appreciated!
Upvotes: 2
Views: 1102
Reputation: 9947
You can put the list of replacements in arrays:
<?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);
}
Or, to keep them all in one associative array (order doesn't matter and missing items just won't be replaced, no errors):
<?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);
}
Or use array_map()
, maybe you'll find it a bit cleaner:
$list = array_map(function($el) use($abbr) {
return strtr($el, $abbr);
}, $list);
Upvotes: 4