2013-08-07 20 views
0

我有2個數組與相同數量的項目。一個存儲類表示社交媒體,另一個存儲與該類配對的URL。他們看起來像這樣:回聲嵌套的foreach沒有重複PHP

$array1 = ([0]=>twitter,[1]=>facebook,[2]=>linkedin); 
$array2 = ([0]=>http://www.twitter.com/username123,[1]=>http://www.facebook.com/user-name123,[2]=>http://www.linkedin.com/stuff/username123); 

我想通過陣列在同一時間循環,打印數據在其各自的地方創建社交媒體鏈接。我目前有這樣的:

foreach ($array1 as $k1=>$class){ 
    foreach ($array2 as $k2=>$URL){ 
    echo '<li><a href="'.$URL.'" class="'.$class.'">Visit Site</a></li>'; 
    } 
} 

這重複每個項目兩次,我認爲是由於嵌套的foreach。

如果我將echo語句移到嵌套函數之外,它會打印我想要的所有類,但只會從該數組中獲取最後一個URL。

如何打印單個列表項,每個配對的鏈接組合?我看到array_unique刪除重複,但我是一個嚴重的PHP n00b。

謝謝。

回答

2

可能,這將有助於:

$rgLinks = array_combine($array1, $array2); 
foreach($rgLinks as $sClass=>$sHref) 
{ 
    echo('<li><a href="'.$sHref.'" class="'.$sClass.'">Visit Site</a></li>'); 
} 
+2

我打算提交相同的答案。有一點需要注意,如果count($ array1)!== count($ array2);''array_combine'將會失敗。 – Leri

+0

是的,它會失敗。我不確定是否應該編輯我的評論,因爲作者沒有提到在這種情況下要做什麼。 –

+0

這工作很好。我注意到array_combine沒有完全相同的計數失敗,但是在這個用例中計數總是匹配的。 – CreMedian

0

你可以使用一個for循環,只要它們都具有相同的count

$length = count($array1); 
for($i=0; $i<$length; $i++) 
{ 
    echo '<li><a href="'.$array2[$i].'" class="'.$array2[$i].'">Visit Site</a></li>'; 
} 
+0

那麼,PHP也有'for'循環。此外,將'count'避開循環是一個好習慣,因爲不需要重新計算。 – Leri

+0

關於'for'循環的好處。 – doitlikejustin

0

你做錯了。它不需要使用2個數組。嘗試類似

$array = array(
     'twitter' => 'http://www.twitter.com/username123', 
     'facebook' => 'http://www.facebook.com/user-name123', 
     'linkedin' => 'http://www.linkedin.com/stuff/username123' 
    ); 

foreach ($array as $url=>$class){ 
    echo '<li><a href="'.$url.'" class="'.$class.'">Visit Site</a></li>'; 
} 

或使用array_combine正如前面的答案中所建議的。

1

IMO,Eugene有最好的答案。我只想提到另一種方式,如果$ array1和$ array2具有不同數量的項目。

foreach ($array1 as $k1=>$class){ 
    if (isset($array2[$k1])) { 
    echo '<li><a href="'.$array2[$k1].'" class="'.$class.'">Visit Site</a></li>'; 
    } 
}