#php #arrays
#php #массивы
Вопрос:
У меня есть 2 массива одинаковой длины. массив $gPositionStudents
и array $gPositionInternships
. Каждому студенту назначается отдельная стажировка, эта часть работает.
Теперь я хочу, чтобы первый элемент (индекс 0) $gPositionStudent
ссылался на второй (индекс 1) элемент массива $gPositionInternship
. Это неявно означает, что последний элемент $gPositionStudents
ссылается на первый элемент $gPositionInternship
. (Я включил картинку с моим объяснением).
Мой код:
// Make table
$header = array();
$header[] = array('data' => 'UGentID');
$header[] = array('data' => 'Internships');
// this big array will contains all rows
// global variables.
global $gStartPositionStudents;
global $gStartPositionInternships;
//var_dump($gStartPositionInternships);
$rows = array();
$i = 0;
foreach($gStartPositionStudents as $value) {
foreach($gStartPositionInternships as $value2) {
// each loop will add a row here.
$row = array();
// build the row
$row[] = array('data' => $value[0]['value']);
//if($value[0] != 0 || $value[0] == 0) {
$row[] = array('data' => $gStartPositionInternships[$i]);
}
$i ;
// add the row to the "big row data (contains all rows)
$rows[] = array('data' => $row);
}
$output = theme('table', $header, $rows);
return $output;
Теперь я хочу, чтобы я мог выбирать, сколько раз мы можем сдвигать. 1 сдвиг или 2 или более сдвигов. То, что я хочу, существует в PHP?
Ответ №1:
Что-то вроде этого:
//get the array keys for the interns and students...
$intern_keys = array_keys($gStartPositionInternships);
$student_keys = array_keys($gStartPositionStudents);
//drop the last intern key off the end and pin it to the front.
array_unshift($intern_keys, array_pop($intern_keys));
//create a mapping array to join the two arrays together.
$student_to_intern_mapping = array();
foreach($student_keys as $key=>$value) {
$student_to_intern_mapping[$value] = $intern_keys[$key];
}
Вам нужно будет изменить его в соответствии с остальной частью вашего кода, но, надеюсь, это продемонстрирует технику, которую вы могли бы использовать. Обратите внимание, что ключевая строка здесь — та, которая выполняет array_unshift()
с array_pop()
. Комментарий в коде должен объяснять, что он делает.
Ответ №2:
Я думаю, вы хотите сделать array_slice($gPositionsStudents, 0, X)
где X — количество ходов для сдвига. Это фрагменты нескольких элементов массива. Затем сделайте array_merge($gPositionsStudents, $arrayOfSlicedOfPositions);
, чтобы добавить их в конец исходного массива.
Затем вы можете выполнить array_combine для создания одного массива с парами ключ => значение из обоих массивов.