Почему всегда "Недопустимый аргумент для foreach"

Я хочу сделать диаграмму на codeigniter, но всегда терплю неудачу. пожалуйста, помогите мне неправильный текст: Произошла ошибка PHP

Severity: Warning Message: Invalid argument supplied for foreach() Filename: chart/index.php Blockquote Line Number : 16

МОЙ ВИД :

      <!-- **********************************************************************************************************************************************************
      MAIN CONTENT
      *********************************************************************************************************************************************************** -->
      <!--main content start-->
      <section id = "main-content">
          <section class = "wrapper">
            <!-- BASIC FORM ELELEMNTS -->
            <div class = "row mt">

                <div class = "col-lg-12">

   <?php
   #periksa array
        foreach($data as $data){
            $id_reservasi[] = $data->id_reservasi;
            $stok[] = (float) $data->stok;
        }
    ?>
</head>
<body>

    <canvas id = "canvas" width = "1000" height = "280"></canvas>

    <!--Load chart js-->
    <script type = "text/javascript" src = "<?php echo base_url().'assets/chartjs/chart.min.js'?>"></script>
    <script>

            var lineChartData = {
                labels : <?php echo json_encode($id_reservasi);?>,
                datasets : [

                    {
                        fillColor: "rgba(60,141,188,0.9)",
                        strokeColor: "rgba(60,141,188,0.8)",
                        pointColor: "#3b8bba",
                        pointStrokeColor: "#fff",
                        pointHighlightFill: "#fff",
                        pointHighlightStroke: "rgba(152,235,239,1)",
                        data : <?php echo json_encode($stok);?>
                    }

                ]

            }

        var myLine = new Chart(document.getElementById("canvas").getContext("2d")).Line(lineChartData);

    </script>
      </div><!-- /col-lg-4 -->  
            </div><!-- /row -->

        </section>
      </section><!-- /MAIN CONTENT -->

МОЯ МОДЕЛЬ:

function get_chart(){
    $query = $this->db->query("SELECT id_reservasi,SUM(status_reservasi) AS stok FROM tbl_reservasi GROUP BY id_reservasi");          
        if ($query->num_rows() > 0){
            foreach($query->result() as $data){
                $hasil[] = $data;
            }
            return $hasil;
        }
    }

МОЙ КОНТРОЛЛЕР:

public function chart() {
        $x['data']=$this->sistem_model->get_chart();
        $this->template_system->load('template_system','sistem/data/chart/index',$x);

    }

пожалуйста, дайте мне решение ...

Вы не можете использовать одну и ту же переменную в обоих местах в foreach().

Geshode 30.07.2018 09:50

можешь привести мне пример?

Reza Alvaero 30.07.2018 09:54
foreach ($data as $item)
Magnus Eriksson 30.07.2018 09:55

все еще не решить @MagnusEriksson

Reza Alvaero 30.07.2018 09:57

@pradeep Я использую ссылку, как у, но получаю пустой элемент. <p> Сообщение: неопределенная переменная: stok </p>

Reza Alvaero 30.07.2018 10:13

Сделайте var_dump($data) и проверьте, что он на самом деле содержит. $data должен быть массивом или объектом, имеющим общедоступные значения или реализующим интерфейс Iterator.

Magnus Eriksson 30.07.2018 10:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
6
148
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Измените foreach($data as $data){ ....} на

if ( is_array($data) ) {
   foreach($data as $item){
      $id_reservasi[] = $item->id_reservasi;
      $stok[] = (float) $item->stok;
   }
}

или измените свою функцию get_chart, чтобы всегда возвращать массив:

function get_chart(){
    $hasil = [];
    $query = $this->db->query("SELECT id_reservasi,SUM(status_reservasi) AS stok FROM tbl_reservasi GROUP BY id_reservasi");          
    if ($query->num_rows() > 0){
        foreach($query->result() as $data){
             $hasil[] = $data;
        }
    }
    return $hasil;
}

помощь по foreach

У меня есть отредактированный пример, но я все еще не решаю

Reza Alvaero 30.07.2018 10:01

Перед foreach проверьте, является ли переменная $data массивом: if ( is_array($data) ) { foreach ... }

nmr 30.07.2018 10:03

спасибо тебе, хозяин

Reza Alvaero 30.07.2018 10:37

ПОСМОТРЕТЬ:

Примечание: as $row

if ($data) {
    foreach ($data as $row) {
        $id_reservasi[] = $row->id_reservasi;
        $stok[] = (float) $row->stok;
    }
} else {
    echo 'no data';
}

МОДЕЛЬ:

Примечание: мы можем просто вернуть result(), поскольку foreach в вашем примере не нужен / избыточен. Важно, что мы также возвращаем false.

function get_chart() {
    $query = $this->db->query("SELECT id_reservasi,SUM(status_reservasi) AS stok FROM tbl_reservasi GROUP BY id_reservasi");
    if ($query->num_rows() > 0) {
        return $query->result();
    }
    return false;
}

Вы также можете сделать (немного чище):

ПОСМОТРЕТЬ:

Обратите внимание на if и endif

<div class = "col-lg-12">

   <?php
   /*
   #periksa array
        foreach($data as $data){
            $id_reservasi[] = $data->id_reservasi;
            $stok[] = (float) $data->stok;
        }
    */
    ?>
</head>
<body>
<?php if ($data): ?>
    <canvas id = "canvas" width = "1000" height = "280"></canvas>

    <!--Load chart js-->
    <script type = "text/javascript" src = "<?php echo base_url().'assets/chartjs/chart.min.js'?>"></script>
    <script>

            var lineChartData = {
                labels : <?php echo json_encode($data['id_reservasi']);?>,
                datasets : [

                    {
                        fillColor: "rgba(60,141,188,0.9)",
                        strokeColor: "rgba(60,141,188,0.8)",
                        pointColor: "#3b8bba",
                        pointStrokeColor: "#fff",
                        pointHighlightFill: "#fff",
                        pointHighlightStroke: "rgba(152,235,239,1)",
                        data : <?php echo json_encode($data['stok']);?>
                    }

                ]

            }

        var myLine = new Chart(document.getElementById("canvas").getContext("2d")).Line(lineChartData);

    </script>
   <?php endif; ?>
      </div><!-- /col-lg-4 -->  
            </div><!-- /row -->

        </section>
      </section><!-- /MAIN CONTENT -->

МОДЕЛЬ:

function get_chart() {
    $query = $this->db->query("SELECT id_reservasi,SUM(status_reservasi) AS stok FROM tbl_reservasi GROUP BY id_reservasi");
    if ($query->num_rows() > 0) {
        $data = array();
        foreach ($query->result() as $row) {
            $data['id_reservasi'][] = $row->id_reservasi;
            $data['stok'][] = $row->stok;
        }
        return $data;
    }
    return false;
}

Другие вопросы по теме