如何使用PHP基于数组值替换数组项?

时间:2012-11-30 22:23:09

标签: php arrays sorting multidimensional-array conditional

我正在寻找一种在我的网站上显示社交媒体图标的方法。我的图标根据社交媒体服务交替显示颜色。

  1. 优先级编号1 - 通过交替颜色对数组项进行排序。
  2. 优先级编号2 - 按颜色组排序。
  3. 我希望它可以有两个条件检查。

    首先尝试通过交替颜色进行排序。但是,可能有三个银色图标,只有一个蓝色图标。

    其次,如果交替颜色不起作用。然后我会更喜欢它,如果它只是通过颜色聚集图标。所以我可能先有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
            )
    
    )
    

    我不一定在为我的问题寻找完整的代码解决方案。或多或少只是寻求关于如何实现这个或我应该使用什么功能的建议。

2 个答案:

答案 0 :(得分:2)

创建一些新的空数组,命名为您要查找的颜色。 foreach通过原始数组并在正确的数组中输入原始数组的索引(如果是银色图标,请输入$silver数组)。

你应该得到类似的东西:

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

一旦你有了这些新阵列,就算一下,如果一个距离另一个超过1位,交替将不起作用。只需从一个数组之前输出索引。

如果图标可以交替显示,只需输出较大的一个条目,然后输出另一个条目,并交替输入,直到两个条目都为空。

答案 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