Как использовать толчок массива в laravel - PullRequest
1 голос
/ 17 июня 2019

Я пытаюсь использовать толчок массива для добавления нового элемента в массив Laravel, но у меня возникли некоторые проблемы.Я хочу добавить новый элемент с именем «Цвет» в «data_chart».Я пытался использовать массив Push и массив Unshift.Есть ли лучший способ сделать это?

Я хочу результат, как это:

"data": [
     {
       "id": 29,
       "title": "get data users",
       "function_name": "selectDataUser",
       "function_drop": "selectDataUser",
       "type_of_chart": "Pie",
       "embed": null,
       "created_at": "2019-06-15 03:26:09.000",
       "updated_at": null,
       "data_chart": {
           "data": [
            {
               "name": "Administrator",
               "total": "100",
               "color" "#9c1d1d" //I want color should be here in this line
             },
             {
                "name": "Staff",
                "total": "100",
                "color" "#9c1d1d" //new item named Color
              },
            ],
       }
     }
    ]

Но когда я пытаюсь использовать массив толчок, результат становитсякак это:

"data": [
         {
           "id": 29,
           "title": "get data users",
           "function_name": "selectDataUser",
           "function_drop": "selectDataUser",
           "type_of_chart": "Pie",
           "embed": null,
           "created_at": "2019-06-15 03:26:09.000",
           "updated_at": null,
           "data_chart": {
              "data": [
                {
                   "name": "Administrator",
                   "total": "100"
                    //color should be in here
                 },
                 {
                    "name": "Staff",
                    "total": "100"
                    //color should be in here
                  }
                ],
              "color": "#9c1d1d" //idk but the color shouldn't like this
           }
         }
        ]

и это мой код:

 public function index(Request $request)
    {
        try {
            $query = $this->dashboard->with('rolesDashboard','userDashboard')
                                    ->orderBy('id')
                                    ->get();

            $data=[];
            foreach ($query as $key) {

            if (empty($key->store_procedure)) {
                $key->function_name = "";
                $data_chart = "";
            }else{
                try {
                    //data chart
                    $data_chart = DB::select($key->function_name); //call store procedure from SQL Server
                } catch (SqlException  $sqlEx) {
                    return response()->default(400, $sqlEx->getMessage());
                }
            }

            $color = "#9c1d1d"; //color value
            array_push($data_chart, $color); //here's the code

            $data[] = [
                'id' => $key->id,
                'title' => $key->title,
                'function_name' => $key->function_name,
                'function_drop' => $key->function_drop,
                'type_of_chart' => $key->type_of_chart,
                'embed' => $key->embed,
                'created_at' => $key->created_at,
                'updated_at' => $key->updated_at, 
                'data_chart' => $data_chart, //call data_chart
            ];  
            }
            return response()->default(200, trans('messages.success.get-data'),$data);
        } catch (Exception $e) {
            return response()->default(400, $e->getMessage());
        }
    }

Ответы [ 2 ]

1 голос
/ 17 июня 2019

Laravel предоставляет нам вспомогательные функции для массивов, с помощью которых мы можем делать это без цикла.

data_set($data_chart, 'data.*.color', $color);

Для получения дополнительной вспомогательной функции, связанной с массивами нажмите здесь

1 голос
/ 17 июня 2019

Вы используете толчок массива вне массива, который вы хотите на самом деле выдвинуть.

Ваш массив data_chart имеет вложенный массив с именем data, так что вы можете сделать цикл вокруг массива, например:

foreach($data['data_chart'] as $row){
    $row->color = "#9c1d1d";  // you are inside the nested data array
}

Вы можете использовать вышеуказанный цикл, когда вы создали массив $data и хотите добавить в него дополнительный элемент (цвет).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...