Обнаружена ошибка Php. Серьезность: предупреждающее сообщение in_array () ожидает, что параметр 2 будет массивом CODEIGNITER

Я программирую с помощью Codeigniter. У меня ошибка

A Php Error was encountered Severity: Warning Message in_array() expect parameter 2 to be array

Я сравнил код с другим, который работает, но ошибки не обнаружил.

Обнаружена ошибка Php. Серьезность: предупреждающее сообщение in_array () ожидает, что параметр 2 будет массивом CODEIGNITER

    public function update($post_id)
    {      
        if (!in_array('updatePost', $this->permission)) {
            redirect('dashboard', 'refresh');
        }

        if (!$post_id) {
            redirect('dashboard', 'refresh');
        }

            $data = array(
                'name' => $this->input->post('post_name'),
                'summary' => $this->input->post('summary'),
                'date' => $this->input->post('date'),
                'description' => $this->input->post('description'),
                'subject_id' => json_encode($this->input->post('subjects')),
                'tag_id' => json_encode($this->input->post('tag')),
                'category_id' => $this->input->post('categories'),
                'availability' => $this->input->post('availability'),
            );

            if ($_FILES['post_image']['size'] > 0) {
                $upload_image = $this->upload_image();
                $upload_image = array('image' => $upload_image);

                $this->model_posts->update($upload_image, $post_id);
            }

            $update = $this->model_posts->update($data, $post_id);
            if ($update == true) {
                $this->session->set_flashdata('success', 'Successfully updated');
                redirect('posts/', 'refresh');
            }
            else {
                $this->session->set_flashdata('errors', 'Error occurred!!');
                redirect('posts/update/'.$post_id, 'refresh');
            }
        }
        else {

            $this->data['subjects'] = $this->model_subjects->getActiveSubjects();         
            $this->data['tag'] = $this->model_tag->getActiveTag();           
            $this->data['categories'] = $this->model_categories->getActiveCategory();          

            $post_data = $this->model_posts->getPostData($post_id);
            $this->data['post_data'] = $post_data;
            $this->render_template('posts/edit', $this->data); 
        }   
    }

edit // Форма публикации

<div class = "form-group">
                  <label for = "tag">Tag</label>
                  <?php $tag_data = json_decode($post_data['tag_id']); ?>
                  <select class = "form-control select_group" id = "tag" name = "tag[]" multiple = "multiple">
                    <?php foreach ($tag as $k => $v): ?>
                      <option value = "<?php echo $v['id'] ?>" <?php if (in_array($v['id'], $tag_data)) { echo 'selected = "selected"'; } ?>><?php echo $v['name'] ?></option>
                    <?php endforeach ?>
                  </select>
                </div>

Переменная NULL, а не массив. Перед использованием проконсультируйтесь с empty.

chris85 11.03.2018 16:18

Почему одна длинная строка PHP? Позже вы возненавидите себя, когда вернетесь к этому коду и вам придется заниматься обслуживанием.

Brian Gottier 11.03.2018 17:12
Стоит ли изучать 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 и хотите разрабатывать...
0
2
650
2

Ответы 2

PHP сообщает вам, что именно не так. В вашем случае, поскольку ваш второй параметр - $tag_data, а $tag_data является результатом json_decode, вполне вероятно, что у json_decode возникла проблема с попыткой декодирования $post_data['tag_id'].

В документации PHP для json_decode указано:

NULL is returned if the json cannot be decoded or if the encoded data is deeper than the recursion limit.

Подробнее см. Здесь: http://php.net/manual/en/function.json-decode.php

Чтобы обойти предупреждение, можно сделать что-то вроде этого:

if ( is_array( $tag_data ) && in_array($v['id'], $tag_data) )

Но главный вопрос здесь в том, почему вы это делаете? Наверное, есть способ получше.

tag_id в базе данных должен быть фактическим массивом в этой форме ["1", "2", ..]

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