即使我使用函数array_unique,我也无法“删除”数组中的double值!
<?php
$tags_array = array() ;
$query_tags = $mysql->Query("SELECT words AS kw FROM users ") ;
/****
*
* This query return something like Array([1] => PHP,ASP,NET [2] => Ruby,Jquery,php,asp_net [3] => Php,asp,visualbasic,c# [4] => [5] =>)
*
*****/
while($fetch_tags = $mysql->Fetch($query_tags))
{
foreach(explode(',',$fetch_tags['kw']) as $kw => $value)
{
if(empty($value)) ;
else
{
$value = ucwords(strtolower($value)) ;
$tags_array[] = $value ;
}
}
}
$tags_array = array_values(array_unique($tags_array, SORT_STRING)) ;
print_r($tags_array) ;
/******
*
* print_r show somethings like this Array([1] => Asp [2] => Php [3] => Php [4] => Ruby [5] => Jquery [6] => Php [7] => Asp_net [8] = >C# [9] => Asp)
*
* IT'S ONLY AN EXAMPLE TO SHOW YOU THE SITUATION
*****/
?>
答案 0 :(得分:1)
确保返回的值实际上不是唯一的。例如
$foo = array("PHP","php","pHP","PHP ");
$foo = array_unique($foo);
仍然会包含4个条目。
如果任何条目包含空格,则应trim
这些。
答案 1 :(得分:0)
只使用值作为键,它们只能存在一次,并且您没有任何数字作为关键字(希望如此):
$tags_array = array_keys(array_flip(($tags_array));
array_flip
将使用值作为键(并删除重复值),array_keys
将再次将所有键作为值返回。
答案 2 :(得分:0)
鉴于这是aray_unique应该做的唯一事情,我发现它没有做到这一点非常令人惊讶。从你的帖子中可以明显看出,也许你认为'php'与'PHP'是一回事?
当我尝试以下操作时,我得到了独特的结果:
$d=Array('PHP,ASP,NET','Ruby,Jquery,php,asp_net','Php,asp,visualbasic,c#');
$o=array();
foreach ($d as $i) {
$p=explode(',',$i);
foreach ($p as $q) {
$o[]=strtoupper($q);
}
}
print_r(array_unique($o));
但是,问题只会出现,因为您的数据库架构未规范化。
答案 3 :(得分:0)
由于似乎没有人提供正确答案,我将在此重复我的评论:
可能是单词具有前面或尾随的空格。然后他们永远不会彼此平等。您可以使用trim
[docs]
$value = ucwords(strtolower(trim($value)));