如何在 php 洗牌中合并两个数组
How to combine two arrays in a php shuffle
我正在尝试创建一个随机播放功能,让人们配对交换礼物。我创建了它的基本 shell 并且不确定从这里到哪里去。我正在获取输出以打乱数据,但是我想组合 array_give
和 array_receive
变量,以便它会输出以下内容:
Paul 和 Becky 正在向 Keith 和 Jackie 捐款。
不过,我不确定如何将其结合起来。 array_give
变量不需要洗牌,array_receive
变量需要洗牌。
还有什么方法可以保证结果不会像下面这样显示?
Paul & Becky 正在给 Paul & Becky
这是我的代码。任何帮助将不胜感激。
HTML
<button type="button" id="shuffle">Create Exchange</button>
<div id="name-output"></div>
JS
$('#shuffle').on('click', function() {
$.ajax({
url: 'php/name-selection.php',
type: 'POST',
success: function(data) {
$('#name-output').html(data);
},
complete:function(){
},
error: function(xhr, textStatus, errorThrown) {
alert(textStatus + '|' + errorThrown);
}
});
})
PHP
$array_give = array('Paul & Becky', 'Keith & Jackie', 'Dave & Lauren', 'Ashley & Jeric', 'Rob & Savannah');
$array_receive = array('Paul & Becky', 'Keith & Jackie', 'Dave & Lauren', 'Ashley & Jeric', 'Rob & Savannah');
shuffle($array_receive);
foreach( $array_receive as $receiving) {
echo $receiving . "<br>";
}
组合成数组的函数叫做array_combine
。您可以阅读它 here,并像这样使用它:
<?php
function checkSame ($a, $b) {
foreach (array_combine($a,$b) as $key => $value)
if ($key===$value) return true;
return false;
}
$array_give = array('Paul & Becky', 'Keith & Jackie', 'Dave & Lauren', 'Ashley & Jeric', 'Rob & Savannah');
$array_receive = array('Paul & Becky', 'Keith & Jackie', 'Dave & Lauren', 'Ashley & Jeric', 'Rob & Savannah');
while (checkSame($array_give, $array_receive)) shuffle($array_receive);
foreach( array_combine($array_give, $array_receive) as $give => $receiving)
{
echo $give. " give to ".$receiving . "<br>";
}
我防止自我赠送的想法是简单地继续洗牌数组,直到没有人被分配给自己。理论上这可能 运行 永远,但我认为对于大多数实际用途来说,它会很快停止。
数组本质上是一样的,只需要一个数组。
然后您可以 pop/pick 在每次迭代中取出每个元素,这将停止自我赠送并允许检查是否有人不会收到礼物,呸骗子!
<?php
$array_give = array('Paul & Becky', 'Keith & Jackie', 'Dave & Lauren', 'Ashley & Jeric', 'Rob & Savannah');
shuffle($array_give);
$i = 0;
while ($give = array_pop($array_give)) {
echo $give;
if ($i % 2 != 0) {
echo "<br>".PHP_EOL;
} elseif (count($array_give) == 0) {
echo ' is getting zilch! ';
break;
} else {
echo ' are giving to ';
}
$i++;
}
.
Rob & Savannah are giving to Ashley & Jeric<br>
Dave & Lauren are giving to Keith & Jackie<br>
Paul & Becky is getting zilch!
我正在尝试创建一个随机播放功能,让人们配对交换礼物。我创建了它的基本 shell 并且不确定从这里到哪里去。我正在获取输出以打乱数据,但是我想组合 array_give
和 array_receive
变量,以便它会输出以下内容:
Paul 和 Becky 正在向 Keith 和 Jackie 捐款。
不过,我不确定如何将其结合起来。 array_give
变量不需要洗牌,array_receive
变量需要洗牌。
还有什么方法可以保证结果不会像下面这样显示?
Paul & Becky 正在给 Paul & Becky
这是我的代码。任何帮助将不胜感激。
HTML
<button type="button" id="shuffle">Create Exchange</button>
<div id="name-output"></div>
JS
$('#shuffle').on('click', function() {
$.ajax({
url: 'php/name-selection.php',
type: 'POST',
success: function(data) {
$('#name-output').html(data);
},
complete:function(){
},
error: function(xhr, textStatus, errorThrown) {
alert(textStatus + '|' + errorThrown);
}
});
})
PHP
$array_give = array('Paul & Becky', 'Keith & Jackie', 'Dave & Lauren', 'Ashley & Jeric', 'Rob & Savannah');
$array_receive = array('Paul & Becky', 'Keith & Jackie', 'Dave & Lauren', 'Ashley & Jeric', 'Rob & Savannah');
shuffle($array_receive);
foreach( $array_receive as $receiving) {
echo $receiving . "<br>";
}
组合成数组的函数叫做array_combine
。您可以阅读它 here,并像这样使用它:
<?php
function checkSame ($a, $b) {
foreach (array_combine($a,$b) as $key => $value)
if ($key===$value) return true;
return false;
}
$array_give = array('Paul & Becky', 'Keith & Jackie', 'Dave & Lauren', 'Ashley & Jeric', 'Rob & Savannah');
$array_receive = array('Paul & Becky', 'Keith & Jackie', 'Dave & Lauren', 'Ashley & Jeric', 'Rob & Savannah');
while (checkSame($array_give, $array_receive)) shuffle($array_receive);
foreach( array_combine($array_give, $array_receive) as $give => $receiving)
{
echo $give. " give to ".$receiving . "<br>";
}
我防止自我赠送的想法是简单地继续洗牌数组,直到没有人被分配给自己。理论上这可能 运行 永远,但我认为对于大多数实际用途来说,它会很快停止。
数组本质上是一样的,只需要一个数组。
然后您可以 pop/pick 在每次迭代中取出每个元素,这将停止自我赠送并允许检查是否有人不会收到礼物,呸骗子!
<?php
$array_give = array('Paul & Becky', 'Keith & Jackie', 'Dave & Lauren', 'Ashley & Jeric', 'Rob & Savannah');
shuffle($array_give);
$i = 0;
while ($give = array_pop($array_give)) {
echo $give;
if ($i % 2 != 0) {
echo "<br>".PHP_EOL;
} elseif (count($array_give) == 0) {
echo ' is getting zilch! ';
break;
} else {
echo ' are giving to ';
}
$i++;
}
.
Rob & Savannah are giving to Ashley & Jeric<br>
Dave & Lauren are giving to Keith & Jackie<br>
Paul & Becky is getting zilch!