在我看来,使用foreach() 比使用for() 更好。
foreach() 的方法对我来说看起来更干净。 for() 的方法没有错,但很奇怪。
查看带有foreach的示例:
$z = array('xxApple' => "itema", 'B' => "itemb", 'C' => "itemc", 'D' => "itemd", 'AAAA' => "iteme");
//$z = array("itema", "itemb", "itemc", "itemd", "iteme"); // works also with this array
$x = array_values($z);
$y = array_keys($z); // Optional
foreach($x as $key1 => $item){
foreach($x as $key2 => $item2){
if($key2 <= $key1){
continue;
}
if($item == $item2){
continue;
}
echo $item . ' vs ' . $item2 . '<br>';
// echo $y[$key1] . ' vs ' . $y[$key2] . '<br>'; // Optional
}
}
//OUTPUT
itema vs itemb
itema vs itemc
itema vs itemd
itema vs iteme
itemb vs itemc
itemb vs itemd
itemb vs iteme
itemc vs itemd
itemc vs iteme
itemd vs iteme
以下是基准测试结果:
基准#1
$z = range(0,20000);
$start = time();
$values = array_values($z);
for ($i = 0; $i < count($values) - 1; $i++) {
for ($j = $i + 1; $j < count($values); $j++) {
}
}
$end = time();
$elapsedTimeA = $end - $start;
// Case A, elapsed time in seconds: 275
echo 'Case A, elapsed time in seconds: ' . $elapsedTimeA;
$start = time();
$x = array_values($z);
foreach($x as $key1 => $item){
foreach($x as $key2 => $item2){
if($key2 <= $key1){
continue;
}
if($item == $item2){
continue;
}
}
}
$end = time();
$elapsedTimeB = $end - $start;
// Case B, elapsed time in seconds: 103
echo 'Case B, elapsed time in seconds: ' . $elapsedTimeB;
基准#2
$z = range(0,20000);
$start = time();
$values = array_values($z);
$count = count($values);
for ($i = 0; $i < $count - 1; $i++) {
for ($j = $i + 1; $j < $count; $j++) {
}
}
$end = time();
$elapsedTimeA = $end - $start;
// Case A, elapsed time in seconds: 17
echo 'Case A, elapsed time in seconds: ' . $elapsedTimeA;
$start = time();
$x = array_values($z);
foreach($x as $key1 => $item){
foreach($x as $key2 => $item2){
if($key2 <= $key1){
continue;
}
if($item == $item2){
continue;
}
}
}
$end = time();
$elapsedTimeB = $end - $start;
// Case B, elapsed time in seconds: 103
echo 'Case B, elapsed time in seconds: ' . $elapsedTimeB;