如何将数组的值与PHP中另一个数组的键匹配?

时间:2018-05-18 08:45:58

标签: php arrays

我有2个数组,其中一个是动态构建的,另一个是我用作地图的。

地图数组:

$social_links_map = [
    'twitter' => 'twitter-icon',
    'facebook' => 'facebook-icon'
];

我的动态数组,这只是一个简单的社交链接列表:

$dynamic_social_links = [ 'twitter.com/me', 'facebook.com/me' ];
$social_links = explode( ',', $dynamic_social_links );

$dynamic_social_links是用户输入,因此,他们的输入可能被错误输入。

我需要检查$social_links中是否存在任何$social_links_map个键,并相应地返回$social_links_map项:

if( !empty( $social_links ) ) {
    foreach( $social_links_map as $handle => $icon ) {
        foreach( $social_links as $social_link ) {
            if( strpos( $social_link, $handle ) ) {
                echo $handle;
            }
        }
    }
}

这不允许"重复删除",它看起来也不是很漂亮。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

使用

array_unique

删除"重复的数据"。

尝试

$social_links = array_unique(explode( ',', $dynamic_social_links ));

答案 1 :(得分:0)

首先,您是否可以允许用户从您的$social_links_map列表中进行选择?

如果没有,那么您使用的方法可能是最简单,最易读的方法,因为没有确定的方法可以将潜在的随机用户输入与预定义的选项数组进行匹配。

有几点需要注意:

正如le Mandarin所提到的,你可以使用array_unique来删除重复项。

另一个是如果在上下文变量(haystack)的最开头找到搜索字符串(针),strpos将返回0(这是假的)。

例如:

strpos('twitter.link/stuff', 'twitter');

将返回0,这是错误导致if语句失败。

尝试类似

的内容
if (false !== strpos('twitter.link/stuff', 'twitter')) {

记下=中的额外!==。这是必要的,因为你说"如果结果不完全是布尔false