$query = $this->db->query("SELECT field_name FROM table_name;");
$getData= array();
foreach ($query->result() as $row) {
array_push($getData, $row->field_name);
}
Я использую codeigniter, для каждой таблицы, которой мне нужно управлять, существуют ли данные для обновления или создания новой вставки, я использую этот код, поэтому я хотел бы увидеть, есть ли больше возможностей не реплицировать код каждый раз. Я просто студент, извините за мой английский






Непонятно, зачем вы это делаете, но я бы назвал это «сглаживанием» массива. Если вы обнаружите необходимость делать это часто, то может помочь создание «рабочего» метода.
Например, в модели у вас может быть два метода, для которых требуются «плоские» результаты.
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?
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; }}
fyi в своей функции вы можете просто return $this->db->count_all_results($table_name) > 0; так же, как ваш if / else и чище
Вы спрашиваете о запросе
REPLACE INTO? илиINSERT ... ON DUPLICATE?