使用foreach删除对象中的当前项 - CodeIgniter

时间:2012-10-26 04:02:52

标签: codeigniter foreach

我正在使用CodeIgniter并希望从循环中的对象中删除项目

foreach($query->result() as $row){
     if($row->parent_id == 1){
         // code here to delete current record
    }
}

我想使用foreach循环所有记录。如果循环中的当前项满足if中的条件,则删除$ query对象中的当前行。

我可以删除CodeIgniter中$ query对象中的当前记录吗?还有其他方法可以删除它吗?

2 个答案:

答案 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查询中的行会不会更容易?