简体   繁体   中英

dynamic variables from array

I store the field names within an array, in hopes to dynamically create the variables.

I receive a illegal offset type error for the if and else, these two lines:

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

$data[$tmp_field] = 0;

I checked the post data and it is posting with the appropriate data, but I am not sure what the problem is.

$student_id stores all the students ids., for example: $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;
}

This is the array format I desire:

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

Added screenshot to give you a visual of the form the data is being posted from

在此处输入图片说明

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;

I am assuming that all these fields are arrays, as otherwise you wouldn't need any loops.

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];
        }
    }
}

You are trying to use the student id as an array key for the other fields but the HTML form is just a standard indexed array, not keyed to any student data.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM