考虑以下数组作为输入:
$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'
);
任何关于如何开始的建议都将不胜感激!
$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);
}
for ($i=0;$i<sizeof($input);$i++) {
为了
for ($i=0;$i<sizeof($input)-1;$i++) {
可能是这样的东西;
$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'),
...
);
if($j <= $i) break;
现在是 if($j <= $i) break;
(否则'A' => 'A'这对键值对将不会显示) - giorgio这在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];
}
}
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);
}
}
如果你需要像数组一样处理成对数据
$pairs = [];
foreach($a as $k => $v) {
foreach(array_slice($a, $k + 1) as $k2 => $v2) {
$pairs[] = [$v, $v2];
}
}
array('AB', 'AC', ...)
。 - js-coder