PHP Loop два массива, если индекс одного является последним массивом перемотки - PullRequest
4 голосов
/ 04 апреля 2019

У меня есть два массива. Первый массив - это имена, и он имеет 5 имен. Второй массив это группы, и он имеет 3 группы. Я хочу пройти через оба массива и установить каждое имя индекса в группу индексов. Если индекс группы заканчивается, я хочу перезапустить второй массив.

Я попытался сбросить групповой индекс до 0, если он достигает последнего элемента, но он не работает.

$names = [
  'John',
  'Jane',
  'George',
  'Jim',
  'Jack'
];

$groups = [
  '1',
  '2',
  '3'
];

foreach ($names as $index => $name) {
   $result = "The student: " . $name . " belongs to the: " .$groups[$index]. "group" ;
   echo ($result);
   echo "<br>";
   echo "<br>";
}

Когда он достигает четвертого элемента имени, элемент группы должен быть 1. Есть ли способ сделать такое мышление?

Ожидаемый результат

John - 1

Jane - 2

George - 3

Jim - 1

Jack - 2

Заранее спасибо

Ответы [ 4 ]

6 голосов
/ 04 апреля 2019

Мы предполагаем, что массив имеет числовую индексацию (начиная с 0) и что пропущенные индексы отсутствуют (т. Е. Массив $group равен всегда , определен как range(1, $n);).

Затем вы можете использовать оператор модуля % против длины этого массива, как показано ниже.

foreach ($names as $index => $name) {
   $result = "The student: " . $name . " belongs to group " .$groups[$index % count($groups)]. ".\n";
   echo $result;
}
4 голосов
/ 04 апреля 2019

Вы можете по модулю % индексировать группы.

$groups[$index % sizeOf($groups)]

<?php
$names = [
  'John',
  'Jane',
  'George',
  'Jim',
  'Jack'
];

$groups = [
  '1',
  '2',
  '3'
];

foreach ($names as $index => $name) {
   $result = "The student: " . $name . " belongs to the: " .$groups[$index%sizeOf($groups)]. "group" ;
   echo ($result);
   echo "<br>";
   echo "<br>";
}

результат: https://3v4l.org/LnOHAK

The student: John belongs to the: 1group<br><br>The student: Jane belongs to the: 2group<br><br>The student: George belongs to the: 3group<br><br>The student: Jim belo
0 голосов
/ 04 апреля 2019

Это будет работать для любого вида массива

$names = [
  'John',
  'Jane',
  'George',
  'Jim',
  'Jack'
];

global $groups;

$groups = [
  '1',
  '2',
  '3'
];

$newArr = array_combine(
            $names, 
              array_merge(
                  $groups,
                  array_map(
                    function($v){
                      global $groups;
                      return $groups[$v%count($groups)]; 
                    }, 
                   array_keys(array_diff_key($names, $groups))
                 )
              )
          );
0 голосов
/ 04 апреля 2019

Попробуй это!В этом коде при добавлении новой группы проблем не должно быть.

<?php

$names = [
  'John',
  'Jane',
  'George',
  'Jim',
  'Jack'
];

$groups = [
  '1',
  '2',
  '3'
];

foreach ($names as $index => $name) {

   $result = "The student: " . $name . " belongs to the: " .$groups[$index % count($groups)]. "group" ;
   echo ($result);
   echo "<br>";
   echo "<br>";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...