сдвиг массива без indexOfOutBounds

#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 для создания одного массива с парами ключ => значение из обоих массивов.