我有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;
}
}
}
}
这不允许"重复删除",它看起来也不是很漂亮。有什么想法吗?
答案 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
。