偏移量未定义。什么是抵消?

时间:2013-08-19 06:26:07

标签: php codeigniter

我收到关于“undefined offset = 0”的警告。我做错了什么?

这是我的控制者:

function document_data()
{
  $this->load->library('upload');

  $files = $_FILES;
  $cpt = count($_FILES['userfile']['name']);
  $tax_name=$this->session->userdata['doc_proff'];
  $tax_cid=array();

  foreach($tax_name as $key=>$value)
  {
    $tax_cid[]=$this->Tax_model->get_id($value);
  }

  foreach($tax_cid as $k=>$v) {
    $new[$k] = $v[0];
  }

  //var_dump($k);die('gugu');
  foreach($new as $k=>$v) {
    $tax_id[$k] = $v['tax_id'];
  }
  //var_dump($v);die('gugu');

  $this->upload->overwrite = true;

  for($i=0; $i<$cpt; $i++)
  {
    $ext=explode(".", $files['userfile']['name'][$i]);
    $file_name=$_POST["doc_title"][$i].".".$ext[1];                                                      
    $_FILES['userfile']['name']= $file_name;
    $_FILES['userfile']['type']= $files['userfile']['type'][$i];
    $_FILES['userfile']['tmp_name']= $files['userfile']['tmp_name'][$i];
    $_FILES['userfile']['error']= $files['userfile']['error'][$i];
    $_FILES['userfile']['size']= $files['userfile']['size'][$i];                    

    $empid=$this->session->userdata['empid'];
    $this->upload->initialize($this->set_upload_options());

    if ( ! $this->upload->do_upload())
    {
      $error = array('error' => $this->upload->display_errors());
      $this->load->view('doc_upload', $error);
    }

    $data=array(
      'doc_status' => 1,
      'doc_title'  => $_POST["doc_title"][$i],
      'doc_link'   => $file_name
    );

    $this->Tax_model->update_tax_submit($empid,$data,$tax_id[$i]);
    $this->session->set_flashdata('message', "<p>Data added successfully.</p>");
  }
}

这是我的模特:

public function get_id($name)
{
  $this->db->select('tax_id');
  $this->db->where('tax_name',$name);
  $query=$this->db->get('tax_saving');
  return $query->result_array();
}

警告发生在我的控制器的以下行:

$new[$k] = $v[0];

一切似乎都很好。我只是想摆脱这个警告。我该怎么办?

2 个答案:

答案 0 :(得分:2)

您已使用$k => $v拆分索引和值。只需使用获取值:$v

foreach($tax_cid as $k => $v) {
  $new[$k] = $v;
}

你的阵列转储:

array(4) 
{
 [0]=> array(0) { } 
 [1]=> array(1) { [0]=> array(1) { ["tax_id"]=> string(2) "10" } } 
 [2]=> array(1) { [0]=> array(1) { ["tax_id"]=> string(2) "11" } } 
 [3]=> array(1) { [0]=> array(1) { ["tax_id"]=> string(2) "14" } } 
} 

事实上,您的$new[$k] = $v[0];用法是正确的。

错误原因,您的第一个索引为空。从tax_model检查你的结果。

为什么你使用双foreach?您不需要foreachs

以下
  foreach($tax_cid as $k=>$v) {
    $new[$k] = $v[0];
  }

  //var_dump($k);die('gugu');
  foreach($new as $k=>$v) {
    $tax_id[$k] = $v['tax_id'];
  }

你可以使用类似于一个foreach的东西:

foreach($tax_name as $key=>$value)
{
   $result = $this->Tax_model->get_id($value);
   $tax_cid[] = $result[0]['tax_id'];
}

答案 1 :(得分:0)

显示错误可能是$v数组没有索引0.首先确保如果$v是一个数组,那么在分配它时使用索引并使用适当的索引,并且偏移是数组的索引。