Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-如何修改对象数组中的类别名称和子类别名称?_Php_Mysql_Arrays_Laravel_Foreach - Fatal编程技术网

PHP-如何修改对象数组中的类别名称和子类别名称?

PHP-如何修改对象数组中的类别名称和子类别名称?,php,mysql,arrays,laravel,foreach,Php,Mysql,Arrays,Laravel,Foreach,查看我的现有代码: class CategoryController extends ApiController { public function getCategory(){ $categories = DB::table('products') ->select('category', 'category_name') ->distinct('category', 'category_name') ->

查看我的现有代码:

class CategoryController extends ApiController
{
    public function getCategory(){
       $categories = DB::table('products')
        ->select('category', 'category_name')
        ->distinct('category', 'category_name')
        ->get();
        $newArr = [];
        foreach ($categories as $value) {
            $newArr[$value->category_name] = [];
            $subcategories = DB::table('products')
            ->select('subcategory_name')
            ->where('subcategory', 'LIKE', '%'. $value->category.'%')
            ->distinct('subcategory')
            ->get()->pluck('subcategory_name');
            array_push($newArr[$value->category_name], $subcategories);
        }
    return response()->json([
        'data' => $newArr
    ]);
    }

}
答案似乎是:

 "data": {
        "Food": [
            [
                "Chicken",
                "Egg",
                "Pie"
            ]
        ],
        "Drinks": [
            [
                "Beer",
                "Juice",
                "Water"
            ]
        ],
但这不是我想要的回应。我需要一个:

data: {
{
category_name : "Food",
subcategories_name : ["Chicken", "Eggs", "Pie"]
}
{
category_name : "Drinks",
subcategories_name : ["Beer", "Juice", "Water"]
}
}
如果你不理解代码的某些部分,请询问我。我在产品表中有一些字段,如类别、类别名称、子类别、子类别名称。它所属的代码类别和子类别是相同的代码。我所需要的就是像上面写的那样写一个回复。我的逻辑是将所有类别放入类别和子类别中,我设置所有子类别,然后将它们合并到一个数组中。这对我来说并不重要,重要的是结果。谢谢


另外,我不知道我的数据库对您有多重要,但有一个产品表和4个字段=类别、子类别、类别名称、子类别名称。仅此而已。

您需要在输出数组中手动分配键

foreach ($categories as $value) {

        $subcategories = DB::table('products')
        ->select('subcategory_name')
        ->where('subcategory', 'LIKE', '%'. $value->category.'%')
        ->distinct('subcategory')
        ->get()->pluck('subcategory_name');

        $newArr[] = [
             'category_name' => $value->category_name;
             'subcategories_name' => subcategories;
         ];
    }

    $newArrValues = array_values($newArr);
    $output = json_encode($out);

好的,我的回答现在是这样的:“数据:{“0”:{“类别名称”:“食品”,“子类别名称”:[“鸡肉”,“鸡蛋”,“水],},“1”:{“类别名称”:“饮料”,“子类别名称”:[“啤酒”,“水”, ] },可以删除此索引0:和1…?删除循环中的第一行。这是因为
$newArr
是索引数组。我想您可以尝试从数组中获取值,然后将其编码为json。我将更新answer@devnullψ谢谢。你真的应该学会使用连接。连接会是什么样子?这应该只是一个提示。我真的不想详细说明:-)