1

即使我使用函数array_unique,我也无法从数组中“删除”双精度值!

<?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 
*****/
?>
4

4 回答 4

1

确保返回的值实际上不是唯一的。例如

$foo = array("PHP","php","pHP","PHP ");
$foo = array_unique($foo);

仍将包含 4 个条目。

如果任何条目包含空格,您应该使用trim这些。

于 2011-07-21T16:09:37.303 回答
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));

但是,问题只是因为您的数据库模式未标准化而出现。

于 2011-07-21T16:09:16.517 回答
0

由于似乎没有人提供正确的答案,我将在这里重复我的评论:

可能是单词前面或后面有空格。那么他们永远不会平等。您可以使用[docs]删除这些空格trim

$value = ucwords(strtolower(trim($value)));
于 2011-07-21T21:45:32.520 回答
0

只需将值用作键,它们只能存在一次,并且您没有任何数字作为关键字(希望如此):

$tags_array = array_keys(array_flip(($tags_array));

array_flip将使用值作为键(并删除重复值),array_keys然后将所有键再次作为值返回。

于 2011-07-21T16:03:52.960 回答