Я думаю, что ваша проблема именно здесь:
$giftfname[j], $fname[i] = $giftfname[i], $fname[j]
Ваши значения i
находятся в диапазоне от нуля до последнего индекса в $fname
(включительно), и, вероятно, ваш $giftfname
начинается какклон $fname
(или хотя бы другой массив с такой же длины ).Но когда вы прокручиваете each
, вы уменьшаете $giftfname
, поэтому $giftfname[i]
будет nil
, а операция свопинга, приведенная выше, переведет nil
в $giftfname[j]
(что должно быть полезно$giftfname
).Подобные проблемы применимы к $giftlname
и $giftemail
.
. Я бы рекомендовал использовать один массив с тремя объектами (имя, фамилия, адрес электронной почты) вместо трех параллельных массивов.Существует также метод shuffle
для Array, который может быть вам полезен:
- Начните с массива людей.
- Сделайте копию этого массива.
- Перемешайте копию, пока она не будет отличаться в каждом индексе от этого исходного массива.
- Затем
zip
вместе, чтобы получить окончательный список пар даритель / получатель.