2016-07-20 15 views
1

Ich verwende die Bibliothek. Mein Code durchläuft grundsätzlich meine verschiedenen Seiten und listet alle relevanten Anker auf, die ich brauche. Meine Frage ist: Wie drucke ich den ersten Wert des href im Anker des "Selektors" in jeder der $memb(n) Variablen im Array von $team.Wie drucke ich alle ersten Werte eines Array Array in PHP?

Dies ist mein Code:

$memb1 = 'http://www.xyz1.org'; 
$memb2 = 'http://www.abc3.org'; 
$memb(n) = '...etc...etc' 

$teams = array(
    array("url" => $memb1, "selector" => ".product-list > 
         table:nth-child(1) > 
         tbody:nth-child(1) > 
         tr:nth-child(2) > 
         td:nth-child(2) > a"), 
    array("url" => $memb2, "selector" => ".product-list > 
         table:nth-child(1) > 
         tbody:nth-child(1) > 
         tr:nth-child(2) > 
         td:nth-child(2) > a"), 
    array("url" => $memb(n), "selector" => ".product-list > 
         table:nth-child(1) > 
         tbody:nth-child(1) > 
         tr:nth-child(2) > 
         td:nth-child(2) > a"),...etc...etc 

Wenn die foreach-Schleife wie folgt ausgeführt werden:

foreach($teams as $site) { 
    $url = $site["url"]; 
    $html = file_get_html($url); 
    foreach ($html->find($site["selector"]) as $a) { 
     $links[] = $a->href; 
    } 
} 
?> 
<pre> 
<?php print_r($links);?> 
</pre> 

ich alle ausgewählten Anker ich von allen $memb Variablen alle zusammen wollte, noch i‘ Ich versuche, den ersten Wert der href im Anker des "Selektors" in jeder der $memb(n) Variablen im Array $team zu drucken, aber ich kann keinen Weg finden, dies zu tun.

Ich habe bereits versucht print_r(array_values($links)[0]); noch ich von $memb1 nur den ersten Anker bekommen und es bleibt dort stehen, ist es nicht die erste Anker von $memb2 und so weiter gedruckt wird fortgesetzt.

Wie kann ich den ersten Anker (Index 0) von jeder anderen $ memb Site drucken?

+0

Wie sieht die Ausgabe von 'print_r ($ links)' aus? –

+0

Versuchen Sie, einen 'break;' nach der Zeile '$ links [] = $ a-> href;' – apokryfos

+0

@apokryfos, fast zur gleichen Zeit =) – spirit

Antwort

2

Wenn ich Sie recht verstehe, als diese versuchen:

foreach($teams as $site) { 
    $url = $site["url"]; 
    $html = file_get_html($url); 
    foreach ($html->find($site["selector"]) as $a) { 
     $links[] = $a->href; 
     break; 
    } 
} 

oder können Sie es ein wenig tun optimiert:

foreach($teams as $site) { 
    $url = $site["url"]; 
    $html = file_get_html($url); 
    $link = $html->find($site["selector"], 0); 
    if (!empty($link)) $links[] = $link->href; 
} 
+0

Das tat tatsächlich diesen Trick, danke Neshama! – clusterBuddy

+0

Warum brauchen Sie eine 'foreach'-Schleife, wenn sie bei der ersten Iteration immer bricht. Verwenden Sie einfach '[0]', um auf das erste Element des Arrays zuzugreifen? – Barmar

+0

@clusterBuddy, bitte, versuchen Sie die aktualisierte Version und sagen Sie mir, ob es funktioniert. – spirit

1

Verwenden Sie ein Array-Index auf dem Ergebnis des Aufrufs find()

foreach($teams as $site) { 
    $url = $site["url"]; 
    $html = file_get_html($url); 
    $anchors = $html->find($site["selector"]); 
    if (!empty($anchors)) { 
     $links[] = $anchors[0]->href; 
    } 
} 
+0

Ich würde diese Antwort wählen. Einen Bruch in einer Schleife ohne Bedingung zu verwenden, nur um das erste Element zu bekommen, scheint mir nicht richtig zu sein – CarlosCarucce

+0

@CarlosCarucce, einverstanden. aktualisiert meine Antwort mit einigen Verbesserungen – spirit

+0

Ihre aktualisierte Version ist eine Verbesserung auf meiner, ich habe vergessen, das zweite Argument zu 'find()'. – Barmar