Tối ưu hóa các vòng lặp thừa trong PHP
Trong đoạn mã sau, một lập trình viên nào đó đang kiểm tra
xem số 3 có trong mảng hay không:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$exists = false;
foreach ($arr as $elem) {
if ($elem == 3) {
$exists = true;
}
}
var_dump($exists);
?>
Có gì không ổn với giải pháp của anh ta? Có vẻ như
không có thao tác thừa nào trong vòng lặp. Vấn đề,
tuy nhiên, là sau khi xác định được rằng số 3
có trong mảng - vòng lặp vẫn tiếp tục chạy cho đến hết mảng.
Sẽ không hiệu quả nhất nếu số 3
được tìm thấy ở đâu đó gần đầu mảng, còn bản thân mảng
lại dài, chẳng hạn, 1000 phần tử.
Như vậy sẽ có một nghìn lần lặp vô dụng, thừa thãi!
Không tối ưu chút nào.
Hãy tối ưu hóa mã bằng cách dừng vòng lặp đúng lúc:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$exists = false;
foreach ($arr as $elem) {
if ($elem == 3) {
$exists = true;
break;
}
}
var_dump($exists);
?>
Đoạn mã sau đếm xem cần cộng bao nhiêu
phần tử của mảng
để tổng trở nên lớn hơn 10.
Hãy thực hiện tối ưu hóa:
<?php
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$sum = 0;
$i = 1;
foreach ($arr as $elem) {
$sum += $elem;
if ($sum <= 10) {
$i++;
}
}
echo $i;
?>
Đoạn mã sau in ra các số chẵn từ một khoảng cho trước. Hãy thực hiện tối ưu hóa:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0) {
echo $i;
}
}
?>
Đoạn mã sau in ra các số
chia hết đồng thời cho 2
và cho 3. Hãy thực hiện tối ưu hóa:
<?php
for ($i = 0; $i <= 100; $i++) {
if ($i % 2 === 0 and $i % 3 === 0) {
echo $i;
}
}
?>