2017-02-09 72 views
2

考虑以下阵列..array_unique删除跨度重复值

$a = array(
    'a' => 'red', 
    'b' => 'green', 
    'c' => 'red' 
); 
print_r(array_unique($a)); 

你会得到

阵列([α] =>红色并[b] =>绿)

我有一个数组,使用值为<span>给他们一个类。

$a = array(
    'a' => '<span class="available">red</span>', 
    'b' => '<span class="available">green</span>', 
    'c' => '<span class="booked">red</span>' 
); 
print_r(array_unique($a)); 

你得到

阵列([α] =>红色并[b] =>绿并[c] =>红色)

这是因为与这些类,它们不再是独一无二的。

有没有办法只使用字符串的一部分来使用array_unique?也许首先在值上使用条形标签?

+0

是的,要么删除格式以提取您想要的值,要么考虑正则表达式。 –

+0

如何使用array_unique?你能为我提供一个例子吗?我能找到的唯一参数是排序类型 – Collins

+0

嗯,我已经回答了,但是应该返回哪个_red_? _Available_或_Booked_? – AbraCadaver

回答

2

所以strip_tags()是一个很好的想法:

$result = array_intersect_key($a, array_unique(array_map('strip_tags', $a))); 
  • 地图数组剥去标签与array_map()
  • array_unique()
  • 从原来的阵列获取元素获取唯一值与唯一阵列有共同的键与array_intersect_key()

这产生了:

Array 
(
    [a] => <span class="available">red</span> 
    [b] => <span class="available">green</span> 
) 

因此,大家可以看到,它会返回第一个值红色

+0

谢谢。发现!! – Collins

0

如果你想从你的span标签中获得唯一的值,你可以像你说的那样,首先简单地去掉标签然后打印出唯一的值。

$a = array(
    'a' => '<span class="available">red</span>', 
    'b' => '<span class="available">green</span>', 
    'c' => '<span class="booked">red</span>' 
); 


foreach ($a as $val) { 
    $b[] = strip_tags($val); 
} 


print_r(array_unique($b));