array_unique只在一个字段上?

时间:2012-01-09 06:55:34

标签: php mysql

我有一个自动完成框的代码,我正在添加一个图像以供选择澄清但是要确保返回的title是唯一的,但是,当我找到使该数组唯一的代码时,我添加了其他代码,使其在其他领域不是唯一的。有办法解决这个问题吗?

$query = "SELECT $title, imageURL FROM PRprodINFO2 WHERE ((prodcatID = '$cat_id')
          AND ($title LIKE \"%" . $_GET["q"] . "%\")) group by $title LIMIT 8";
}

$result = mysql_query($query);

// set the array
$output_items = array();

while($row = mysql_fetch_array($result)) { 

    // clean after first non letter/number
    $row[$title] = preg_replace('/[^\w\s].*$/', "", $row[$title]);

    //trim spaces
    $row[$title] = trim($row[$title]);

    // add image src
    $output_items[] = '<img src='.$row[imageURL].' style=max-width:50px;>'
                      .$row[$title]; 

} // while

// here i need just $row[title] to be unique,
// it is made non unique after regex strips off some characters
$output = array_unique($output_items);

print(implode("\n", $output));

mysql_close();

1 个答案:

答案 0 :(得分:1)

我可能会对你的要求感到困惑。看起来你已经拥有了独特的标题,因为你在sql中按标题分组。但是,也许你有额外的非字母数字字符,你正在剥夺你的正则表达式,使一些独特的标题相同。

在这种情况下,请尝试:

,而不是像你一样建立你的$ output_items
$output_items[$row['title']] = $row['imageURL'];

这将确保每个标题都是唯一的。您将拥有与该标题匹配的最后一行的imageURL。如果你想要匹配的第一个标题,那么只需检查isset,然后再覆盖它:

if (!isset($output_items[$row['title']])) $output_items[$row['title']] = $row['imageURL'];

然后,在循环之外,构建输出字符串。

$output = '';
foreach ($output_items as $title => $image) {
    $output .= '<img src='.$image.' ...>'.$title."\n";
}
echo $output;