php - array_unique 仅在一个字段上?

标签 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();

最佳答案

我可能对你的问题感到困惑。看起来您已经有了唯一的标题,因为您在 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;

关于php - array_unique 仅在一个字段上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8784861/

相关文章:

php - 如何将 yyyy mm dd 转换为 Laravel 日期并插入 mysql date() 列

MySQL 查询优化 : Multiple SELECT IN to LEFT JOIN

mysql - 从一个表复制数据,将其格式化为另一个表

php - SQLSTATE[08001] : [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x2746

jquery - 如何查询 MYSQL 表以获取总体和过去一年内列出现的计数?

mysql - #1005 - 无法创建表 'testt.rating'(错误号 : 150) with MySQL

javascript - 如何将 Url 变量与 php 变量匹配

PHP7 返回类型为 JSON

java - 如何在linux中使用php中的java来监控文件

javascript - 如何将 PHP 脚本添加到 .js 文件中?