我正在使用CodeIgniter并希望从循环中的对象中删除项目
foreach($query->result() as $row){
if($row->parent_id == 1){
// code here to delete current record
}
}
我想使用foreach循环所有记录。如果循环中的当前项满足if中的条件,则删除$ query对象中的当前行。
我可以删除CodeIgniter中$ query对象中的当前记录吗?还有其他方法可以删除它吗?
答案 0 :(得分:4)
从循环中的对象中删除项目
$query = $this->db->query("YOUR QUERY");
$rows = $query->result();
foreach ($rows as $key => $row)
{
if($row->parent_id == 1){
unset($rows[$key]);
// code here to delete current record
}
}
print_r($rows) // remove row with parent_id = 1
查看更多@ Removing an item from object in a loop
您还可以更改select语句以获取parent_id不是eq 1的所有记录(或其他'where'逻辑来过滤行...请参阅下面的示例和链接)
$this->db->get('mytable')
$this->db->where('parent_id !=', 1);
或
//get all except parent id 1,4 or 7
$parent_ids = array(1, 4, 7);
$this->db->where_not_in('parent_id', $parent_ids);
从您之前提出的问题标题中删除数据库中的记录(使用CodeIgniter中的foreach删除当前记录)
您可以使用sql查询执行此操作,而无需使用任何php逻辑,只需在sql中写入条件...查看更多信息http://codeigniter.com/user_guide/database/active_record.html
例如
//delete record where parent_id = 1
$this->db->delete('mytable', array('parent_id' => 1));
或
//delete record where parent_id = 1 or 5 or 8
$names = array(1, 5, 8);
$this->db->where_in('parent_id', $names);
$this->db->delete('mytable');
或
//delete record where parent_id = 1
$this->db->where('parent_id', 1);
$this->db->delete('mytable');
或
//delete all record where parent_id not eq 1
$this->db->where('parent_id !=', 1);
//delete all record where parent_id less than 10
$this->db->where('parent_id <', 10);
答案 1 :(得分:1)
反转并将其添加到新数组中:
$new_result = array();
foreach($query->result() as $row){
if($row->parent_id != 1){
$new_result[] = $row;
}
}
使用$ new_result对象完成后。
ps:过滤SQL查询中的行会不会更容易?