PHP调用array_unique()报错:参数1需为数组,实际传入字符串
错误原因
array_unique()函数的作用是对传入的数组做去重处理,要求第一个参数必须是数组类型。你在foreach循环中直接传入了$value->category,从data.json的结构可以看到,每个遍历项的category字段本身是字符串类型(比如on rent、on sell),不是数组,因此触发类型错误。
同时你的逻辑位置存在问题:去重操作需要先收集全量的分类值才能执行,你在遍历单条数据的阶段就调用去重,哪怕传参类型正确,也无法实现下拉选项全局去重的效果。
修复方法
- 先初始化一个空数组,用于存储遍历过程中拿到的所有分类值
- 遍历
$sheet2数据集时,将每条数据的category值追加到上述数组中,不在循环内执行去重 - 全量分类收集完成后,统一调用
array_unique()对分类数组做去重 - 遍历去重后的分类列表,渲染为select的option选项
修复后代码
<label for="eventType"><b>Choose a category:</b></label> <select id="catagOption trap" class="filterOptions" onchange="FindCatag()"> <?php $str = file_get_contents('data.json'); $b = json_decode($str); $sheet2 = $b->sheet2; // 收集全部分类值 $allCategories = []; foreach ($sheet2 as $item) { $allCategories[] = $item->category; } // 统一去重 $uniqueCategories = array_unique($allCategories, SORT_STRING); // 渲染下拉选项 foreach ($uniqueCategories as $categ) { ?> <option value="0" data-catag-option="<?php echo $categ ?>"><?php echo $categ ?></option> <?php } ?> </select>
注意事项
- 现有select标签的id属性值
catagOption trap包含空格,不符合HTML id命名规范,建议修改为无空格的格式(比如catagOptionTrap),避免后续JS获取DOM时出现异常 - 建议增加json解析结果的校验逻辑,若
json_decode返回null可提前抛出解析错误提示,方便排查问题
内容的提问来源于stack exchange,提问作者aditya panchal
相关产品推荐
相关产品推荐

