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

CakePHP 3.x中如何用foreach遍历生成仅含产品id与name的新数组

问题解决方案

完整修改后代码

public function getCategory(){
    $this->autoRender = False;
    $list = TableRegistry::get('Subproducts');
    $supplierId = $this->request->data['supplierId'];
    if($this->request->is('ajax')) {
        $newArray = []; // 初始化目标数组,避免未定义报错
        if(!empty($supplierId)) {
            $query1 = $list->find()->contain(['Products'])
            ->where(['Subproducts.supplier_id =' => $supplierId]);
            $data = $query1->hydrate(false)->toArray();
            if(!empty($data)){   
                foreach ($data as $value){ 
                    // 对应关联Products后的数组结构取值
                    if(isset($value['product']) && !empty($value['product'])){
                        $newArray[] = [
                            'id' => $value['product']['id'],
                            'name' => $value['product']['name']
                        ];
                    }
                    
                    // 如果你要适配后来贴的不带product子数组的$data结构,把上面的判断替换为下面的逻辑即可
                    // $newArray[] = [
                    //     'id' => $value['category_id'],
                    //     'name' => $value['product_name']
                    // ];
                }                       
            }            
        }
        // 统一返回标准格式,空数据也不会导致前端解析报错
        echo json_encode(["category"=>$newArray]);
        exit;
    }           
}

实现逻辑说明

  • 先提前初始化$newArray空数组,避免后续赋值、输出时报未定义变量错误
  • 遍历$data中的每一条子产品记录时,先判断对应字段是否存在,避免数组下标不存在的报错
  • 按需把需要的id、name字段组合成子项,追加到$newArray中
  • 无论查询结果是否为空,都返回统一的json结构,降低前端适配成本

内容的提问来源于stack exchange,提问作者Tinku Tiwari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:15:03