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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:57:22