2011-01-18 3 views
0

Как ограничить этот цикл, чтобы получить только 6 значений?Как ограничить этот цикл конкретным номером?

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

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


    } 
} 
+0

ли ваш getElementsByTagName ('а') является функцией PHP? Где вы его определили? –

+1

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

ответ

1

Используйте счетчик для подсчета значений, а затем break из цикла, если счетчик достигает 6:

$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

Я думаю, что лучше, что путь:

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

Я бы сказал, что разрыв внутри цикла - это плохая практика. Этот вид петли быстро и легко читается.

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++ 


    } 
} 
Смежные вопросы