You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP数组去重:如何移除books表数据数组中的重复元素

嘿,我来帮你搞定这个数组重复的问题!根据你描述的情况,大概率是两种原因导致的,我给你分情况说明解决办法:

情况1:数组同时存在数字索引和关联键(比如"id":1和"0":1)

这种情况最常见,是因为你获取查询结果时用了混合模式(比如PDO默认的FETCH_BOTH,或者mysqli的MYSQLI_BOTH),导致每条记录的数组里既有字段名作为键,又有数字索引作为键,转JSON后就会出现类似重复的内容。

解决起来很简单,获取结果时直接指定关联数组模式就行:

如果你用的是PDO:

把原来的fetchAll()改成fetchAll(PDO::FETCH_ASSOC),示例代码:

// 假设你已经建立了PDO连接
$stmt = $pdo->prepare("SELECT title FROM books WHERE category = ?");
$stmt->execute(['fiction']);
$books = $stmt->fetchAll(PDO::FETCH_ASSOC); // 指定只返回关联数组

// 输出JSON
echo json_encode($books);

如果你用的是mysqli:

用mysqli_fetch_all(MYSQLI_ASSOC)或者循环里用mysqli_fetch_assoc(),示例:

// 假设已经建立mysqli连接
$result = mysqli_query($conn, "SELECT title FROM books WHERE category = 'fiction'");
$books = mysqli_fetch_all($result, MYSQLI_ASSOC); // 指定关联数组格式

echo json_encode($books);

这样获取的数组只有字段名作为键,不会有数字索引的重复项了。

情况2:数组里有重复的元素(比如多个"Book 1")

如果是查询结果本身有重复的记录,导致数组里出现重复的元素,那可以从两个层面解决:

方法1:在SQL查询阶段去重(推荐)

直接用DISTINCT关键字,从数据库取出来的就是不重复的记录,省去PHP处理的步骤,性能也更好:

SELECT DISTINCT title FROM books WHERE [你的条件]

方法2:用PHP处理数组去重

  • 一维数组(比如只取title列的一维数组):直接用array_unique()
// 假设$books是一维数组:["Book 1", "Book 1", "Book 2"]
$uniqueBooks = array_unique($books);
echo json_encode($uniqueBooks);
  • 多维数组(比如每条记录是一个关联数组):需要先序列化子数组再去重,示例:
// 假设$books是多维数组:[{"title":"Book 1"}, {"title":"Book 1"}, {"title":"Book 2"}]
$serializedItems = array_map('serialize', $books);
$uniqueSerialized = array_unique($serializedItems);
$uniqueBooks = array_map('unserialize', $uniqueSerialized);

echo json_encode($uniqueBooks);

内容的提问来源于stack exchange,提问作者Joseph Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:13:47