数组中的动态变量

时间:2012-08-02 14:51:12

标签: php codeigniter

我将字段名存储在数组中,希望动态创建变量。

我收到if和else的非法偏移类型错误,这两行:

$data[$tmp_field] = $tmp_field[$id];

$data[$tmp_field] = 0;

我检查了帖子数据,并使用适当的数据发布,但我不确定问题是什么。

$ student_id存储所有学生ID,例如:$student_id = array(8,9,11,23,30,42,55);

function updateStudentInfo() {
  $student_id = $this->input->post('student_id');
  $internet_student = $this->input->post('internet_student');
  $dismissed = $this->input->post('dismissed');
  $non_matriculated_student = $this->input->post('non_matriculated_student');
  $felony = $this->input->post('felony');
  $probation = $this->input->post('probation');
  $h_number = $this->input->post('h_number');
  $office_direct_to = $this->input->post('office_direct_to');
  $holds = $this->input->post('holds');

  $fields = array('internet_student', 'non_matriculated_student', 'h_number', 'felony', 'probation', 'dismissed');

  foreach($student_id as $id):
    $data = array();

    foreach($fields as $field_name):
      $tmp_field = ${$field_name};

      if(empty($tmp_field[$id])) {
        $data[$tmp_field] = 0;
      } else { 
        $data[$tmp_field] = $tmp_field[$id];
      }
    endforeach;

    print '<pre style="color:#fff;">';
    print_r($data);
    print '</pre>';

  endforeach;
}

这是我想要的数组格式:

Array
(
    [internet_student] => 1
    [non_matriculated_student] => 1
    [h_number] => 0
    [felony] => 0
    [probation] => 1
    [dismissed] => 0
)

添加了屏幕截图,让您直观地了解数据的发布方式

enter image description here

2 个答案:

答案 0 :(得分:1)

foreach($student_id as $id):
    $data = array();

    foreach($fields as $field_name):
      $tmp_field = ${$field_name};

      if(empty($tmp_field[$id])) {
        $data[$field_name] = 0;
      } else { 
        $data[$field_name] = $tmp_field[$id];
      }
    endforeach;

    print '<pre style="color:#fff;">';
    print_r($data);
    print '</pre>';

  endforeach;

答案 1 :(得分:0)

我假设所有这些字段都是数组,否则你不需要任何循环。

function updateStudentInfo()
{
    $student_id                 = $this->input->post('student_id');
    $internet_student           = $this->input->post('internet_student');
    $dismissed              = $this->input->post('dismissed');
    $non_matriculated_student   = $this->input->post('non_matriculated_student');
    $felony                     = $this->input->post('felony');
    $probation              = $this->input->post('probation');
    $h_number                   = $this->input->post('h_number');
    $office_direct_to           = $this->input->post('office_direct_to');
    $holds                  = $this->input->post('holds');

    $fields = array('internet_student', 'non_matriculated_student', 'h_number', 'felony', 'probation', 'dismissed');

    $student_count  = count($student_id);
    foreach($student_id as $id)
    {
        $data   = array();
        foreach($fields as $field)
        {
            if(array_key_exists($id, $$field))
                $data[$field]   = ${$field}[$id];
        }
    }
}

您正在尝试将学生ID用作其他字段的数组键,但HTML表单只是一个标准的索引数组,而不是键入任何学生数据。