0

Web サイトにソーシャル メディアのアイコンを表示する方法を探しています。私のアイコンは、ソーシャル メディア サービスに応じて色が変わります。

  1. 優先度番号 1 - 配列項目を色を交互に並べ替えます。
  2. 優先度 2 - 色のグループ別に並べ替えます。

2つの条件チェックができるといいのですが。

まず、色を交互に並べ替えてみます。ただし、銀色のアイコンが 3 つ、青色のアイコンが 1 つだけの場合もあります。

第二に、色を交互に変えてもうまくいかなかった場合。代わりに、アイコンを色ごとにまとめるだけでよいと思います。そのため、最初に 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
        )

)

私は必ずしも私の質問に対する完全なコードソリューションを探しているわけではありません。多かれ少なかれ、これをどのように達成できるか、またはどの機能を使用すべきかについてのアドバイスを探しています。

4

2 に答える 2

2

探している色という名前の新しい空の配列をいくつか作成します。foreach元の配列を介して元の配列のインデックスを適切な配列に入力します (銀色のアイコンの場合は、$silver配列に入力します)。

次のような結果になるはずです。

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

これらの新しい配列を取得したら、それらを数えます。一方が他方から1桁以上離れている場合、交互は機能しません。ある配列のインデックスを他の配列の前に出力するだけです。

アイコンが交互に表示される場合は、大きい方からエントリを出力し、次にもう一方のエントリを出力し、両方が空になるまで交互に表示します。

于 2012-11-30T22:33:22.573 に答える
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']);
    }
}
于 2012-11-30T22:44:44.017 に答える