如何制作数组值对?

时间:2012-02-07 12:29:44

标签: php arrays algorithm

将以下数组视为输入:

$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'
);

有关如何开始此操作的任何输入都表示赞赏!

5 个答案:

答案 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);
        }
}

See it on ideone

答案 4 :(得分:0)

如果您需要将对作为数组

$pairs = [];
foreach($a as $k => $v) {
    foreach(array_slice($a, $k + 1) as $k2 => $v2) {
        $pairs[] = [$v, $v2];
    }
}