我有一个 PHP 数组,其中包含 2-5 个项目。
$z=["itema", "itemb", "itemc", "itemd","iteme"];
Run Code Online (Sandbox Code Playgroud)
我需要一种方法来遍历数组并将每个项目相互匹配一次。所以输出看起来像
itema vs itemb
itema vs itemc
itema vs itemd
itema vs iteme
itemb vs itemc
itemb vs itemd
itemb vs iteme
itemc vs itemd...ect
Run Code Online (Sandbox Code Playgroud)
我似乎无法让循环击中每个项目。我认为它必须是一个循环中的循环,因为我只有一个循环不起作用。
并且它必须只去每个地方一次。我对如何让它发挥作用感到非常迷茫。任何帮助将非常感激。
你可以使用两个 for 循环
$count = count($z);
for ($i = 0; $i < $count - 1; $i++) {
for ($j = $i + 1; $j < $count; $j++) {
// compare $z[$i] with $z[$j]...
}
}
Run Code Online (Sandbox Code Playgroud)
另一个循环从 0 到 n - 2,内部循环将外部值中的值作为初始值并进行到结束。
如果您还需要处理关联数组,就像一位评论者提到的那样,您可以使用array_values(and array_keys) 来处理这种情况。
$values = array_values($z);
$keys = array_keys($z); // optional - only used, if you need the keys..
$count = count($values);
for ($i = 0; $i < $count - 1; $i++) {
for ($j = $i + 1; $j < $count; $j++) {
// compare $values[$i] with $values[$j]...
// or $keys[$i] with $keys[$j];
}
}
Run Code Online (Sandbox Code Playgroud)
注意:
foreach循环在任何一种情况下都不起作用,因为您不能告诉内循环跳过所有在外循环中已经看到的值。并教foreach循环这种行为会导致foreach,这实际上看起来像一个简单的for循环,但速度更慢。使用foreach.