Как я уже говорил в комментариях $siteler
пусто, когда вы пытаетесь пройти через него, но есть еще пара проблем:
- Сначала ваш код будет срабатывать не более одного раза, когдассылка точно 'https://sumai.tokyu -land.co.jp ', и я не уверен, что это то, что вы хотите.
- Вы вызываете
DOM
функций в массиве. - Кажется, что заботятся только о ссылках внутри тегов 'div'.
- Вы переопределяете переменную
$link
в каждом цикле, так что в результате вы получите только одну ссылку.
Это фиксированный код:
$link = [];
foreach ($getlinks as $site) {
// Any link in the domain, not just the homepage
if(strpos($site, 'https://sumai.tokyu-land.co.jp') === 0) {
$dom = getSiteContent($site);
$divs = $dom->getElementsByTagName('div');
foreach ($divs as $div) {
// Can have more than one class
$attrs = explode(' ', $div->getAttribute('class'));
if(in_array('pc_hnavi', $attrs)) {
$linker = $div->getElementsByTagName('a');
foreach ($linker as $a) {
// Add to the array
$link[] = $a->getAttribute('href');
}
}
}
}
}
Однако он не проверяет, существует ли ссылка в массиве и может ли она обрабатывать одни и те же ссылки снова и снова.Я настоятельно рекомендую использовать существующий сканер.
Из комментариев выясняется, что pc_hnavi
- это id
, а не класс, и вас интересует только первая ссылка.Вы можете получить доступ к этому элементу напрямую, без перебора элементов:
foreach ($getlinks as $site) {
// Any link in the domain, not just the homepage
if(strpos($site, 'https://sumai.tokyu-land.co.jp') === 0) {
$dom = getSiteContent($site);
$div = $dom->getElementById('pc_hnavi');
if ($div != null) {
$links = $div->getElementsByTagName('a');
if ($links->length > 0) {
$a = $links->item(0);
$link[] = $a->getAttribute('href');
}
}
}
}