Laravel: получить массив данных и цикл с For - PullRequest
1 голос
/ 18 июня 2019

Привет. Я пытаюсь получить массив данных и зацикливаюсь на For. Итак, у меня есть массив с именем 'color', и я хочу зациклить массив с For. Но у меня есть некоторые проблемы в результате. Я пытался изменить массив и в foreach, но я не знал, как получить результат, как я хочу.

Результат:

"data": [
        {
            "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": [
                {
                    "name": "Administrator",
                    "total": "100",
                    "color": "0xFF888888" //color cannot be the same
                },
                {
                    "name": "Staff",
                    "total": "100",
                    "color": "0xFF888888" //the color must be different
                },
                {
                    "name": "Super Administrator",
                    "total": "1",
                    "color": "0xFF888888" //this is not result what I want.
                }
            ],

      }
  ]

Я хочу такой ответ:

 "data": [
            {
                "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": [
                    {
                        "name": "Administrator",
                        "total": "100",
                        "color": "0xFF000000" //all this color different
                    },
                    {
                        "name": "Staff",
                        "total": "100",
                        "color": "0xFF444444" //the color different
                    },
                    {
                        "name": "Super Administrator",
                        "total": "1",
                        "color": "0xFF888888" //this is result what I want.
                    }
                ],
}
  ]

Это мой код:

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

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

            $data_chart = DB::select($key->function_name); //call store procedure from SQL Server

            $color = array(
                "0xFF000000" ,
                "0xFF444444" ,
                "0xFF888888" ,
                "0xFFCCCCCC",
                "0xFFFFFFFF",
                "0xFFFF0000" ,
                "0xFF00FF00" ,
            ); // this is array color

            for ($i=0; $i < count($data_chart) ; $i++) { 
                $set = $color[$i]; //Get data array color
            }


            foreach($data_chart as $row){
                $row->color = $set;
            }

            $data[] = [
                'title' => $key->title,
                'function_name' => $key->function_name,
                'created_at' => $key->created_at,
                'updated_at' => $key->updated_at, 
                'data_chart' => $data_chart, //return data_chart and color
            ];  
            }

            return response()->default(200, trans('messages.success.get-data'),$data);
        } catch (Exception $e) {
            return response()->default(400, $e->getMessage());
        }
    }

1 Ответ

2 голосов
/ 18 июня 2019

$set - массив, не может быть назначен как строка.Мой совет меняет приведенный ниже код:

        for ($i=0; $i < count($data_chart) ; $i++) { 
            $set = $color[$i]; //Get data array color
        }


        foreach($data_chart as $row){
            $row->color = $set;
        }

на

        $i=0; 
        foreach($data_chart as $row){
            $row->color = $color[$i];
            $i++;
        }

, но если ваш счет $data_chart превышает $color, он вернет ошибку, для лучшей обработки используйте кодниже:

        $i=0; 
        foreach($data_chart as $row){
            if(isset($color[$i])){
            $row->color = $color[$i];
            $i++; }
            else{
            $i=0;
            }

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