假设我有两个迭代器:
$a = new ArrayIterator(array(4, 3, 2));
$b = new ArrayIterator(array(6, 5, 1));
现在我想以某种方式迭代它们以输出以下内容:
a b sum
4 6 10
4 5 9
3 6 9
3 5 8
2 6 8
2 5 7
4 1 5
3 1 4
2 1 3
所以我想迭代所有可能的组合。另外,我想要的是,总和最高值的那个将首先出现。
我不想使用数组(因此也没有数组排序),我需要使用迭代器(因为我原来的情况下的约束)。
答案 0 :(得分:0)
这是你要求的订单抛出的东西。没有某种形式,你不能做到这一点;但堆数据结构可能是一个选项:
$a = new ArrayIterator(array(4, 2, 3));
$b = new ArrayIterator(array(1, 6, 5));
class MyHeap extends SplHeap {
public function compare($v1, $v2) {
if ($v1->sum === $v2->sum) return 0;
return $v1->sum < $v2->sum ? -1 : 1;
}
}
$heap = new MyHeap();
foreach($a as $val1) {
foreach($b as $val2) {
$heap->insert(
(object) [
'val1' => $val1,
'val2' => $val2,
'sum' => $val1+$val2
]
);
}
}
$heap->top();
foreach($heap as $value) {
echo $value->val1, ' ', $value->val2, ' ', $value->sum, PHP_EOL;
}