将以下数组视为输入:
$input = array('A', 'B', 'C', 'D');
我正在寻找一种通过这个数组进行循环的方法,写下每一对可能的两个值。在此示例中:AB AC AD BC BD CD。请注意,BA不会算作一对,因为已经提到了AB:
$output = array(
'A' => 'B',
'A' => 'C',
'A' => 'D',
'B' => 'C',
'B' => 'D'
);
有关如何开始此操作的任何输入都表示赞赏!
答案 0 :(得分:2)
$output=array();
for ($i=0;$i<sizeof($input);$i++) {
$k=$input[$i];
for ($j=$i+1;$j<sizeof($input);$j++) {
$v=$input[$j];
$output[]=array($k=>$v);
}
}
修改强>
截至评论时,重组后的输出
$output=array();
//See below
for ($i=0;$i<sizeof($input);$i++) {
$k=$input[$i];
$v=array();
for ($j=$i+1;$j<sizeof($input);$j++) {
$v[]=$input[$j];
}
$output[]=array($k=>$v);
}
这会给你'D'=&gt; Array()作为最后一行,如果你不想要hti你必须改变
for ($i=0;$i<sizeof($input);$i++) {
到
for ($i=0;$i<sizeof($input)-1;$i++) {
答案 1 :(得分:1)
这样的事可能;
$input = array('A', 'B', 'C', 'D');
$input_copy = $input;
$output = array();
$i = 0;
foreach($input as $val) {
$j = 0;
foreach($input_copy as $cval) {
if($j < $i) break;
$output[] = array($val => $cval);
$j++;
}
$i++;
}
$output = array(
0 => array('A' => 'A'),
1 => array('A' => 'B'),
2 => array('A' => 'C'),
...
);
请注意,您的输出数组是不可能的,因为每次都会覆盖该键
答案 2 :(得分:1)
这在PHP中是不可能的,因为PHP数组只能有唯一的密钥。
您可以输出
$output = array(
'A' => array('B','C','D'),
'B' => array('C','D')
);
$input = array('A', 'B', 'C', 'D');
foreach($input as $key => $value){
$tempKey = $key;
for($key +1 ; $key < count($input) ; $key++){
$result[$tempKey][] = $input[$key];
}
}
答案 3 :(得分:0)
您可以使用此通用方法:
function combine($inputArray, &$outputArray, $index, $combLen) {
global $outstr;
for ($i = $index; $i < count($inputArray); $i++) {
$outstr.=$inputArray[$i];
if(strlen($outstr) == $combLen) {
$outputArray[]= $outstr;
}
combine($inputArray, $outputArray, $i + 1, $combLen);
$outstr = substr($outstr, 0, strlen($outstr)-1);
}
}
答案 4 :(得分:0)
如果您需要将对作为数组
$pairs = [];
foreach($a as $k => $v) {
foreach(array_slice($a, $k + 1) as $k2 => $v2) {
$pairs[] = [$v, $v2];
}
}