#php
#php
Вопрос:
У меня есть некоторый код, который принимает URL-адрес rss-канала, расширяет ссылку rss и получает отдельные ссылки внутри этого XML-канала. После проверки, существует ли ссылка, я вставляю ее в таблицу, если она не существует, и ничего не делаю, если она существует. Однако мой код становится все более нечитаемым, и еще одна проверка, требующая другого foreach, должна быть еще более нечитаемой.
Это код
public function links_cron_job(){
//Get Rss Links
$this->db->select("the_link_itself");
$query = $this->db->get_where("search_engine_links", array("link_type" => "rss"));
foreach ($query->result() as $row){
$url = $row->the_link_itself;
$rss = Feed::loadRss($url);
foreach ($rss->item as $item) {
$this->db->where('the_link_itself',$item->link);
$query3 = $this->db->get('search_engine_links');
if ($query3->num_rows() > 0){
echo 'duplicates are there';
}else{
$data = array(
'link_country' => 'usa',
'the_link_itself' => $item->link,
'link_category' => 'news_website',
'link_added_by' => 'admin',
'link_type' => 'ordinary_link',
'link_local_type' => 'news',
'link_region' => 'countrywide',
'link_city' => 'washington',
'date_added' => $item->timestamp,
'last_updated' => time()
);
$this->db->insert('search_engine_links', $data);
echo 'no duplicates are there';
}
}
}
}
Каким был бы другой подход к выполнению того, что я делаю?
Комментарии:
1.Хорошее расположение отступов в коде поможет нам прочитать код и, что более важно, поможет вам прочитать и отладить ваш код . Взгляните на стандарт кодирования для вашей собственной выгоды. Возможно, вас попросят внести изменения в этот код через несколько недель / месяцев, и в конце вы поблагодарите меня.
2. Спасибо, я сделаю отступ.
3. Я сделал это за вас
4. Рабочее решение, требующее рефакторинга, больше подходит для проверки кода .
Ответ №1:
Обычно я бы сказал, просто введите возврат. Но в этом случае вам все равно придется работать в дополнительных итерациях. Так что в этом случае, по крайней мере, мы знаем, что закончили с этой итерацией, поэтому, по крайней мере, мы можем добавить оператор continue:
<?php
foreach ($rss->item as $item) {
$this->db->where('the_link_itself',$item->link);
$query3 = $this->db->get('search_engine_links');
if ($query3->num_rows() > 0) {
echo 'duplicates are there';
continue;
}
$data = array(
'link_country' => 'usa',
'the_link_itself' => $item->link,
'link_category' => 'news_website',
'link_added_by' => 'admin',
'link_type' => 'ordinary_link',
'link_local_type' => 'news',
'link_region' => 'countrywide',
'link_city' => 'washington',
'date_added' => $item->timestamp,
'last_updated' => time()
);
$this->db->insert('search_engine_links', $data);
echo 'no duplicates are there';
}