2012-11-30 48 views
0

我正在尋找一種方法在我的網站上顯示社交媒體圖標。我的圖標取決於社交媒體服務的顏色。如何使用PHP替代基於數組值的數組項?

  1. 優先級編號1 - 通過交替顏色對數組項進行排序。
  2. 優先級編號2 - 按顏色組排序。

我想如果它可以有兩個條件檢查。

首先試圖通過交替顏色進行排序。但是,可能有三個銀色圖標和一個藍色圖標。其次,如果顏色交替不起作用。然後,我會更喜歡它是否只是通過顏色聚集圖標。所以我可能先有1個藍色圖標,之後有3個銀色圖標。

這裏是我的圖標數據的數組:

Array 
(
    [0] => Array 
     (
      [service] => twitter 
      [url] => https://twitter.com/1/ 
      [color] => silver 
     ) 

    [1] => Array 
     (
      [service] => google_plus 
      [url] => https://plus.google.com/2/posts 
      [color] => silver 
     ) 

    [2] => Array 
     (
      [service] => facebook 
      [url] => https://www.facebook.com/3/ 
      [color] => blue 
     ) 

    [3] => Array 
     (
      [service] => linkedin 
      [url] => http://us.linkedin.com/company/4/ 
      [color] => blue 
     ) 

    [4] => Array 
     (
      [service] => youtube 
      [url] => http://www.youtube.com/user/5/ 
      [color] => silver 
     ) 

) 

我不一定要找一個完全成熟的代碼解決方案,以我的問題。或多或少只是尋求如何實現這一目標或我應該使用什麼功能的建議。

+0

那麼如何決定是否優先#1不能得到滿足,並回落到優先級#2? –

+1

只有兩種可能的顏色嗎? – MatsLindh

+0

@fiskfisk是的,只有兩種顏色。 –

回答

2

創建一對新的空數組,命名爲您正在查找的顏色。 foreach通過原始數組並輸入原始數組的索引在適當的數組(如果一個銀色的圖標,輸入$silver數組)。

您應該結束了的東西,如:

$silver = array(0, 1, 4); 
$blue = array(2, 3); 

一旦你擁有了這些新的陣列,算來,如果超過1個位數遠離其他的,交替將無法工作。只需輸出一個數組之前的索引。

如果圖標可以交替顯示,只需從較大的一個輸出一個條目,然後輸出另一個條目,然後交替輸入,直到兩者都爲空。

1

您可以嘗試

$silver = array_filter($data,function($v){ return $v['color'] == "silver" ;}); 
$blue = array_filter($data,function($v){ return $v['color'] == "blue" ;}); 

foreach(array_map(null, $silver,$blue) as $set) 
{ 
    foreach($set as $var) 
    { 
     printf("<a href=\"%s\" style=\"color:%s;\">%s</a> <br />",$var['url'],$var['color'],$var['service']); 
    } 
} 

See Live Output

+0

有趣的做法。另一個PHP函數裏面的函數定義是什麼?我甚至不知道這是可能的。是否有這種類型的使用文件? –

+0

其被稱爲「匿名函數」或「閉包」參見http://php.net/manual/en/functions.anonymous.php – Baba