Cách lưu trữ nhiều giá trị trong mảng trong php bằng vòng lặp foreach?

$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)

// without an unset($value), $value is still a reference to the last item: $arr[3]

foreach ($arr as $key => $value) {
    // $arr[3] will be updated with each value from $arr...
    echo "{$key} => {$value} ";
    print_r($arr);
}
// ...until ultimately the second-to-last value is copied onto the last value

________số 8

Một số hàm PHP hoạt động với một hoặc nhiều giá trị. Ví dụ: array_merge(), hợp nhất nhiều mảng thành một. Hoặc, isset(), kiểm tra đồng thời sự tồn tại của một số biến. str_replace() và preg_replace_callback() cũng xuất hiện trong tâm trí

Cách tiếp cận này thường mang lại một chút hiệu suất, bằng cách xử lý danh sách các đối số cùng một lúc, thay vì gọi nhiều lần cùng một phương thức để xử lý từng phần tử riêng lẻ. Điều này được gọi là 'Di chuyển foreach bên trong phương thức'. Hãy xem chúng tôi có thể làm điều đó như thế nào và hiệu quả mà nó mang lại

Di chuyển foreach trong phương thức

Ý tưởng cơ bản là cấu trúc lại đoạn mã sau

<?php
foreach($array as &$element) {
     $object->foo($element);
}
?>

vào trong

<?php
$object->foo($array);
?>

Chúng ta hãy rõ ràng. không có phép thuật nào xảy ra ở đây. Vòng lặp foreach() (hoặc bất kỳ vòng lặp nào khác) thực sự được di chuyển bên trong định nghĩa foo() để xử lý cục bộ. Vòng lặp vẫn tồn tại sau khi tái cấu trúc

<?php
class X {
  function foo($element) {
    $this->array[] = $element;
  }
}
?>

có thể trở thành

<?php
class X {
  function foo($element) {
    if (is_array($element)) {
      $this->array = array_merge($element);
      return;
    }
    
    // if element is not an array
    $this->array[] = $element;
  }
}
?>

Các màn trình diễn nằm trong lời gọi hàm

Trên thực tế, hiệu suất đạt được phụ thuộc vào hai khía cạnh. giảm các cuộc gọi chức năng và tối ưu hóa cục bộ

Về cơ bản, khi vòng lặp nằm ngoài phương thức, có bao nhiêu lời gọi đến phương thức đó bằng với các phần tử trong mảng. PHP phải tạo một bối cảnh mới mỗi lần và làm sạch nó mỗi lần. Đây là công việc rất cổ điển và nó sẽ gây nhàm chán cho con người chúng ta, nhưng PHP thích điều này

Điều này có nghĩa là nó là một tối ưu hóa vi mô, sẽ loại bỏ 1 ms cho mỗi 10k lệnh gọi đến một chức năng và có thể là 2 ms cho một lệnh gọi phương thức. Vì vậy, khi quyết định tái cấu trúc nên cân nhắc khối lượng công việc so với cú va chạm tốc độ

Khía cạnh thứ hai là tối ưu hóa cục bộ. Ví dụ: hợp nhất các mảng với array_merge(), hay còn gọi là en masse, thực sự nhanh hơn là đẩy từng phần tử một. Thậm chí tốt hơn, chỉ hợp nhất các mảng một lần sẽ mang lại nhiều hiệu suất hơn nữa. Khía cạnh này hoàn toàn phụ thuộc vào trường hợp kinh doanh hiện tại, vì vậy không phải lúc nào cũng có thể trích xuất các buổi biểu diễn ở đó

3 cách gọi phương thức có nhiều giá trị

đối số đơn hoặc mảng

Cách đầu tiên là có đối số là một giá trị hoặc một mảng. Đây là minh họa ban đầu trong bài viết. Trước tiên, các giá trị phải được thu thập vào một mảng, sau đó chúng được gửi đến phương thức dưới dạng một đối số. Với phát hiện loại, phương thức sẽ phân nhánh tùy thuộc vào loại đối số đến

Điều này thuận tiện khi dữ liệu đã được cung cấp dưới dạng danh sách các giá trị nhất quán. Đọc từ tệp JSON hoặc trích xuất dữ liệu từ cơ sở dữ liệu là các tình huống mà bộ sưu tập các giá trị đã sẵn sàng

Đối số để chuyển đổi mảng. biến thiên

PHP có toán tử biến đổi, khi được sử dụng trong chữ ký phương thức, sẽ thu thập tất cả các đối số cuối cùng vào một mảng. Đây là một cách tuyệt vời để ẩn việc chuyển đổi các đối số thành một mảng. Hơn nữa, nó cho phép gõ các đối số

Và ngay cả khi các đối số nằm trong một mảng, việc biến chúng thành một danh sách các đối số là khá thuận tiện

<?php
class X {
  function foo(string ...$element) {
        // $element is always an array
      $this->array = array_merge($element);
      return;
  }
}

$objectX->foo(...$db_rows);
?>

func_get_args() truyền thống

func_get_args() là cách cuối cùng để đưa tất cả các đối số vào một mảng. Nó cồng kềnh hơn một chút so với các đối số variadic và tạo gánh nặng cho việc nhập hoặc lọc dữ liệu đến cho chính phương thức đó

Làm cho phiên bản mảng hiển thị rõ hơn

Di chuyển foreach() bên trong phương thức có tiềm năng cho cả hiệu suất và sự thuận tiện. Đối với các buổi biểu diễn, điều này xảy ra khi phương pháp này được sử dụng rất thường xuyên và việc tối ưu hóa cục bộ là hiển nhiên. Để thuận tiện, sẽ tốt hơn khi các đối số đã ở định dạng mảng, thậm chí là hàm băm

Hạn chế chính sau đó là giáo dục của nhà phát triển/người dùng. Ngay cả sau nhiều năm tài liệu và bài báo, str_replace() và array_merge() thường không được sử dụng với mảng. Không rõ ràng là một số đối số có thể đơn giản và những đối số khác có thể là mảng (). Hoặc cách tự động cung cấp danh sách đối số tùy ý

curl_setopt() đã đi theo một cách khác và làm rõ tính năng này với hàm curlsetoptarray(), giống như preg_replace_callback() và preg_replace_callback_array(). Các chức năng này xuất hiện như một câu trả lời rõ ràng khi một người tự hỏi làm thế nào để thao tác với một danh sách dài các đối số. str_replace_array() có ai không?

Vì vậy, khi bạn thấy các cuộc gọi lặp đi lặp lại cùng một phương thức liên tiếp, có lẽ đã đến lúc bạn nên hỏi liệu có đáng để cấu trúc lại foreach trong phương thức không

Làm cách nào chúng ta có thể lưu trữ nhiều giá trị của mảng trong PHP?

Để lưu trữ nhiều giá trị, có hai cách thực hiện tác vụ. Một cách là gán mỗi giá trị cho một biến duy nhất , và cách khác, hiệu quả hơn nhiều, là gán nhiều giá trị cho một biến. Đó là những gì chúng ta gọi là một mảng. Một mảng là một cách để lưu trữ nhiều giá trị trong một biến duy nhất.

Chúng ta có thể sử dụng vòng lặp foreach cho mảng đa chiều trong PHP không?

AdvertisementsPHP foreach mảng đa chiều . Trong ví dụ này, chúng ta sử dụng hai câu lệnh foreach để duyệt qua một mảng hai chiều các số nguyên. Đây là đầu ra. We can use multiple foreach statements to loop over multidimensional arrays. In the example, we use two foreach statements to go over a two-dimensional array of integers. This is the output.

Chúng ta có thể sử dụng foreach trong mảng trong PHP không?

Vòng lặp foreach chỉ hoạt động trên mảng và được sử dụng để lặp qua từng cặp khóa/giá trị trong một mảng.

Mảng nào có thể lưu trữ nhiều giá trị chỉ mục trong PHP?

Trong các trang trước, chúng tôi đã mô tả các mảng là một danh sách các cặp khóa/giá trị. Tuy nhiên, đôi khi bạn muốn lưu trữ các giá trị có nhiều hơn một khóa. Đối với điều này, chúng ta có các mảng đa chiều