Tính toán không cần thiết độ dài mảng trong vòng lặp PHP
Cho một mảng số bất kỳ:
<?php
$arr = [1, 2, 3, 4, 5];
?>
Hãy làm sao để mỗi phần tử của mảng được bình phương lên. Tức là chúng ta vẫn giữ nguyên mảng $arr, nhưng với các số đã bình phương.
Trong trường hợp này, vòng lặp foreach không phù hợp, mà cần một vòng lặp for thông thường trên mảng, như thế này:
<?php
$arr = [1, 2, 3, 4, 5];
for ($i = 0; $i < count($arr); $i++) {
$arr[$i] = $arr[$i] * $arr[$i]; // thay đổi từng phần tử của mảng
}
var_dump($arr);
?>
Có gì không ổn với đoạn code này? Vấn đề là count($arr) sẽ được tính toán một cách vô nghĩa trong mỗi lần lặp của vòng lặp! Tại sao lại thế, bởi vì độ dài mảng không thay đổi trong vòng lặp, đúng không?
Để tối ưu hóa, hãy đưa việc tính toán độ dài mảng ra một biến riêng:
<?php
$arr = [1, 2, 3, 4, 5];
$len = count($arr); // tối ưu hóa
for ($i = 1; $i < $len; $i++) {
$arr[$i] = $arr[$i] * $arr[$i];
}
var_dump($arr);
?>
Hãy tối ưu hóa đoạn code dưới đây:
<?php
$arr = [1, 2, 2, 4, 5];
for ($i = 1; $i < count($arr); $i++) {
if ($arr[$i - 1] === $arr[$i]) {
echo $arr[$i] . '<br>';
}
}
?>