динамический массив в php - PullRequest
0 голосов
/ 25 ноября 2011

У меня есть следующее:

$students=array('student1','student2','student3','student4');
$date=array('date1','date2','date3');

$ Students представляет файлы, а $ date представляет столбцы.Для каждого $ студента и $ даты существует различное значение.

Например:

  $students['student1']$dates['date1']='value11';
  $students['student1']$dates['date2']='value12';
  $students['student1']$dates['date3']='value13';
  $students['student2']$dates['date1']='value21';

.... ..... и т. Д.

           date1   date2     date3 
   student1   value11  value12  value13
   student2   value21  value22  value23
   student3   value31  value32  value33

Я хочу заполнить значения в таблице.Я хочу загружать эти значения в сетке динамически.Количество $students и $dates изменяется динамически.
Эти значения заполняются в таблице, которую нужно вставить в базу данных.Мне нужно обновить значения в базе данных.

Моя таблица в базе данных имеет следующие поля:

id_tabla  estudiante   date    values

1         estudiante1  date1  value11
2         estudiante1  date2  value12
3         estudiante1  date3  value13
4         estudiante2  date1  value21
5         estudiante2  date2  value22
6         estudiante2  date3  value23

Вы можете мне помочь?Спасибо.

$ Students генерируется запросом в базе данных.$ date генерируется диапазоном дат в php.

Идея состоит в том, чтобы создать форму с текстовым вводом $ студентов x $ дат, в которую должны быть включены данные.С помощью этой формы я должен получить значения данных.

Ответы [ 2 ]

2 голосов
/ 25 ноября 2011

У вас довольно много требований, и, не зная контекста, нетрудно выбрать правильную структуру данных. Из вашего примера я предполагаю, что у вас есть массив со студентами и массив с датами. Размер массивов может меняться, но вам всегда нужно прикреплять массив дат каждому ученику, верно?

Итак, исходя из моего предположения, я думаю, вам не нужно переставлять два массива в один. Вы можете выполнять свои перечисленные задачи с заданной структурой.

Вывод каждого студента с датами в таблице:

<table>
  <?php foreach($students as $student) { ?>
  <tr>
    <td><?php echo $student; ?></td>
    <?php foreach($dates as $date) { ?>
      <td><?php echo $date; ?></td>
    <?php } ?>
  </tr>
  <?php } ?>
</table>

Вставка в базу данных:

<?php
$insert_dates = "'" . implode("','", $dates) . "'";
foreach($students as $student) {
  $qry = "INSERT INTO `students` (`name`, `date1`, `date2`, `date3`)
                 VALUES ('" . $student . "', " . $insert_dates . ")";
  //execute query
}

Обновление:

<?php
  $qry = "UPDATE `students` 
          SET date1='".$dates[0]."', date2='".$dates[1]."', date2='".$dates[2]."' 
          WHERE name IN ('" . implode("','", $students) . "')";
  //execute query

НО этот подход имеет некоторые очевидные недостатки, касающиеся динамических изменений. Поэтому, если вы собираетесь работать с базами данных, вы должны создать ассоциативные массивы с ключами, соответствующими именам столбцов таблицы:

$students=array();
$students[] = array('name' => 'student1');
$students[] = array('name' => 'student2');
$students[] = array('name' => 'student3');
$students[] = array('name' => 'student4');

$dates=array();
$dates[] = array('date1'=>'15/04/20', 'date2'=>'20/05/15', 'date3'=>'18/11/10');

Запрос на динамическое обновление будет выглядеть так:

  $set_data = '';
  foreach($dates as $key => $value) {
    $set_data .= $key . "='".$value."',";
  }
  $set_data = substr($set_data, 0, -1); //remove last comma
  $qry = "UPDATE `students` 
          SET " . $set_data . "  
          WHERE name IN ('" . implode("','", $students) . "')";
  //execute query

Существует намного больше, чего вы можете достичь, играя со структурами данных (например, применяя и изменяя даты для каждого студента индивидуально, выбирая имя студента в качестве ключа ассоциативного массива, чтобы вы могли получить доступ к каждому студенту по имени, так далее.). Поэтому сначала вы должны выяснить, для чего вам нужны данные, а затем выбрать подходящую структуру на основе этого. Я думаю, вы поняли идею, и я надеюсь, что это поможет!


// UPDATE

Исходя из вашего обновленного вопроса, я думаю, что это может быть хорошим подходом для структуры (хотя я до сих пор не знаю, откуда поступают данные и как / если вы можете заполнить этот массив динамически / программно):

$students = array();
$students[] = array(
  'name' => 'student1',
  'dates' => array(
     'date1' => 'code123kil',
     'date2' => 'dadfdre145',
  )
);
$students[] = array(
  'name' => 'student2',
  'dates' => array(
     'date1' => 'daytetyeyy',
     'date2' => 'dafdfe335',
     'date3' => 'code123kil'
  )
);
//and so on

Итак, давайте выведем его в сетку :

<table>
 <?php foreach($students as $student) { ?>
   <tr>
     <td>Name: <?php echo $student['name']; ?></td>
     <td>Dates: <?php echo implode(', ', $student['dates']); ?></td>
   </tr>
 <?php } ?>
</table>

Вставить в таблицу :

<?php
foreach($students as $student) {
  foreach($student['dates'] as $key => $value) {
    $qry = "INSERT INTO `your_table` (`estudiante`, `date`, `values`)
            VALUES ('".$student['name']."','".$key."','".$value."')";
  //execute query
  }
}

Обновление значений даты в таблице для данного учащегося

<?php
  //find the given student in the array
  $student_to_update = 'student2';
  $student_info = null;
  foreach($sudents as $student) {
   if($student['name'] == $student_to_update) {
    $student_info = $student;
    break;
   }
  }

  //update the student in database:
  if(!is_null($student_info))
    foreach($student_info['dates'] as $key => $value) {
      $qry = "UPDATE `your_table`
              SET `values`='".$value."'
              WHERE `estudiante` = '".$student_info['name']."' 
                AND `date`='".$key."'";
      //execute query
    }
  }

Обновление значений даты в таблице для каждого студента

<?php
  foreach($students as $student) {
    foreach($student['dates'] as $key => $value) {
      $qry = "UPDATE `your_table`
              SET `values`='".$value."'
              WHERE `estudiante` = '".$student['name']."' 
                AND `date`='".$key."'";
      //execute query
    }    
  }
0 голосов
/ 25 ноября 2011

Помогает ли это:

$students=array('student1','student2','student3','student4');
    $date=array('date1','date2','date3');

<pre><code>$c = 0;
$countArr = count($students);
$newArr = array();
for($c = 0; $c < $countArr; $c++) {
    $x = 0;
    foreach($date as $val) {
        $newArr[$c]["date".($x+ 1)] = $date[$x];
        $x++;
    }
}
echo "<pre>";
print_r($newArr);
</code>
...