Лучшее решение этого запроса

$query = $this->db->query("SELECT field_name FROM table_name;");

        $getData= array();

        foreach ($query->result() as $row) {

            array_push($getData, $row->field_name);
        }

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

Вы спрашиваете о запросе REPLACE INTO? или INSERT ... ON DUPLICATE?

mickmackusa 04.11.2018 23:55
Стоит ли изучать 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
1
48
2

Ответы 2

Непонятно, зачем вы это делаете, но я бы назвал это «сглаживанием» массива. Если вы обнаружите необходимость делать это часто, то может помочь создание «рабочего» метода.

Например, в модели у вас может быть два метода, для которых требуются «плоские» результаты.

public function get_something()
{
    $query = $this->db->query("SELECT field_name FROM table_name;");
    //call the "worker"
    return $this->make_flat($query);
}

public function get_something_else()
{
    $query = $this->db->query("SELECT field_name FROM table_name;");
    //call the "worker"
    return $this->make_flat($query);
}

В другом месте модели в приведенном выше коде используется этот «рабочий» метод.

// The "worker" method to flatten the results
protected function make_flat($query)
{
    $getData = []; //is same as $getData = array(); but with less typing
    foreach ($query->result() as $row)
    {
        $getData[] = $row->field_name;
    }
    return $getData;
}

Линия $getData[] = $row->field_name; делает то же самое, что и array_push($getData, $row->field_name);. Но на самом деле это немного быстрее. Это также меньше печатает.

почему бы просто не использовать array_column?

Alex 05.11.2018 02:55

http://php.net/manual/en/function.array-column.php отлично подойдет для этого.

$query = $this->db->query("SELECT field_name FROM table_name;");

$array = array_column($query, 'field_name');

print_r($array);

кажется, ваш вопрос противоречит вашему коду. если вы просто хотите узнать, существует ли уже конкретная запись, вы можете сделать:

$this->db->where('field_name', $var);
$exists = $this->db->count_all_results('table_name');
if ($exists > 0) {
    // update
    // there is an entry with $var for `field_name` in table `table_name`
} else {
    // insert
}

в конце я сделал следующее: публичная функция существует ($ table_name, $ field_name, $ var) {foreach ($ query-> result () as $ row) {$ this-> db-> where ($ field_name, $ var) ; $ существует = $ this-> db-> count_all_results ($ table_name); } если ($ существует> 0) {возврат 1; } else {return 0; }}

ZnayTheTiger 06.11.2018 04:42

fyi в своей функции вы можете просто return $this->db->count_all_results($table_name) > 0; так же, как ваш if / else и чище

Alex 06.11.2018 06:41

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