有两个数组,其中包含大量数据。它们都有相同的键,只是值不同。例子:
假设你有两个人,你想根据他们对水果的喜爱程度做一些计算,但你不想比较相同的水果。
$person1 = array("Apple" => 10, "Pear" => 4, "Banana" => 8, "Pineapple" => 7, "Watermelon" => 7)
$person2 = array("Apple" => 6, "Pear" => 10, "Banana" => 6, "Pineapple" => 9, "Watermelon" => 3)
现在我想比较所有的值,除了水果是相同的。
Person 1 Person 2
Apple = 10 Pear = 10
Apple = 10 Banana = 6
Apple = 10 Pineapple = 9
...
Banana = 8 Apple = 6
Banana = 8 Pear = 10
Banana = 8 Pineapple = 9
请注意,我对第一人和第二个人分别做了苹果香蕉和香蕉苹果,因为计算值可能不同。因此,如果我这样做:
(Person 1 Key) * 2 + (Person 2 Key)
那么你可以得到:
10 * 2 + 6 = 26 for Person1["Apple"] and Person2["Banana"]
,然后
8 * 2 + 6 = 22 for Person1["Banana"] and Person2["Apple"]
有没有办法在不使用嵌套数组或更快的方法的情况下做到这一点?
<标题>编辑
$calculatedValues = array();
$len = sizeof($person1);
$inc = 0;
for($i = 0; $i < $len; ++$i){
for($j = 0; $j < $len; ++$j){
if($i != $j){
$calculatedValues[$inc] = $person1[i] * 2 + $person2[j];
inc++;
}
}
}
标题>不,没有什么比嵌套循环更快的了。好好想想。你必须将A项的所有物品与B项的所有物品进行比较,从而得出你的清单。如果你在B的东西上嵌套一个循环在a的东西上嵌套一个循环,你总共会做多少次迭代?和你要比较的对一样多。这是最少的操作数,所以你不能做得更好。
foreach ($person1 as $fruitA => $quantityA) {
foreach ($person2 as $fruitB => $quantityB) {
$calculatedValues[] = $quantityA * 2 + $quantityB;
}
}