2011-01-18 17 views
0

どのようにしてこのループを制限して6つの値しか得られないのですか?ループのうちこのループを特定の番号に制限するにはどうすればよいですか?

$countries = array(); 
foreach ($my_data as $node) 
{ 
    foreach($node->getElementsByTagName('a') as $href) 
    { 

     $countries[] = strip_tags(trim($href->nodeValue)); 


    } 
} 
+0

あなたのgetElementsByTagName( 'A')は、PHPの関数でいますか?どこを定義しましたか? –

+1

@Eric ['DOMDocument :: getElementsByTagName'](http://php.net/manual/en/domdocument.getelementsbytagname.php) – lonesomeday

答えて

1

値をカウントするカウンタを使用して、breakは、そのカウンタが6に達した場合:

$array = $node->getElementsByTagName('a'); 
for($counter = 0; $counter < min(count($array), 6); ++$counter) { 
    $countries[] = strip_tags($array[$counter]->nodeValue); 
} 

$countryCount = 0 
foreach($node->getElementsByTagName('a') as $href) 
    { 
     $countries[] = strip_tags($href->nodeValue); 
     $countryCount++ 
     if ($countryCount >= 6) break; 
    } 
+0

うまくいかない希望! –

2
$i = 0; 
foreach($node->getElementsByTagName('a') as $href) 
{ 
    if ($i++ === 6) break; 
    $countries[] = strip_tags($href->nodeValue); 

} 
+0

は動作していないようです! –

+0

foreachループ内で反復回数をカウントする変数を追加することは、私の考えではforeachループを使用する目的を抹消しています。ループ内の 'break'命令は、この場合にはあまり良い考えではないでしょう。 –

0

私はそれが良いことな方法だと思いますループの中での中断は、私が言っているような悪い習慣のようなものです。この種のループは、高速かつ容易に読み取ることができます。

2

getElementsByTagName()は配列を返します。あなたができることの場合:

foreach(array_slice($node->getElementsByTagName('a'),0,6) as $href) 
{ 
    $countries[] = strip_tags($href->nodeValue); 

} 

参照:http://us.php.net/manual/en/function.array-slice.php

+0

これはGentautasのソリューションよりも高価かもしれません。 –

+0

@ダスティン:たぶん。しかし、それが6つの要素だけであることを忘れないでください。違いはおそらく無視できます。私は、Dustinのソリューションはforeachループの中で中断を意味しないので、よりクリーンであると思います。 –

+0

これも動作していません! –

1

これは私がそれを行うだろうかです...

$countries = array(); 

$countryCount = 0; 
$countryLimit = 6; 
foreach ($my_data as $node) 
{ 
    foreach($node->getElementsByTagName('a') as $href) 
    { 

     $countries[] = strip_tags(trim($href->nodeValue)); 

if($countryCount == "$countryLimit") 
{ 
break; 
} 

$countryCount++ 


    } 
} 
関連する問題