PHP thay đổi giá trị mảng trong foreach

Trong ví dụ này, chúng tôi đã tạo một mảng gồm năm phần tử với các giá trị số. Sau đó, vòng lặp foreach PHP được sử dụng để lặp qua mảng đó

Bên trong vòng lặp foreach, chúng tôi đã sử dụng câu lệnh echo để hiển thị các giá trị mảng. Xem ví dụ và mã bằng cách nhấp vào hình ảnh hoặc liên kết bên dưới

Xem bản demo và mã trực tuyến

Một ví dụ với khóa và giá trị mảng

Trong ví dụ này, chúng ta sẽ sử dụng cách khác là sử dụng vòng lặp foreach i. e. bao gồm cả chìa khóa. Để làm được điều đó, chúng tôi đã tạo một mảng kết hợp gồm ba phần tử. Mảng $salaries được xác định theo sau bởi ba tên nhân viên [đóng vai trò là khóa] và tiền lương là giá trị

Xem bản demo và mã trực tuyến

Ví dụ thay đổi giá trị phần tử mảng trong vòng lặp foreach

Bạn có thể sửa đổi giá trị của các phần tử của mảng đã cho bằng cách sử dụng vòng lặp foreach. Đối với điều đó, hãy sử dụng “&” trước “$” cho biến giá trị e. g

&$value_of_element

Giá trị sẽ được sửa đổi theo tham chiếu. Để làm cho nó rõ ràng hơn, hãy xem ví dụ sau

Trong ví dụ này, chúng ta đã tạo một mảng số gồm năm phần tử. Sau đó, chúng tôi chỉ cần sử dụng một vòng lặp foreach để hiển thị các giá trị phần tử mảng

Sau đó, chúng tôi đã sử dụng một vòng lặp foreach khác trong đó $value_of_element đứng trước “&”. Bên trong dấu ngoặc nhọn, chúng tôi đã gán các giá trị mới cho các phần tử mảng

Để xem sự khác biệt giữa mảng trước và sau khi gán các giá trị mới, mảng được hiển thị bằng cách sử dụng hàm print_r, được sử dụng để hiển thị biểu diễn trực quan của mảng đã cho

Xem bản demo và mã bằng cách nhấp vào liên kết hoặc hình ảnh bên dưới

 

Xem bản demo và mã trực tuyến

Tại sao chúng tôi sử dụng PHP foreach?

Vòng lặp foreach trong PHP được sử dụng để thao tác với mảng

foreach sẽ lặp qua từng phần tử của mảng đã cho

Bạn cũng có thể sử dụng vòng lặp for đơn giản để thao tác với mảng e. g. bằng cách sử dụng thuộc tính độ dài để lấy độ dài của mảng và sau đó sử dụng nó làm toán tử tối đa. Tuy nhiên, foreach làm cho nó khá đơn giản hơn, được cung cấp riêng để sử dụng với mảng

Nếu bạn làm việc với MySQL hoặc một số cơ sở dữ liệu khác, thì mục đích của nó sẽ rõ ràng hơn. Ví dụ: tìm nạp nhiều hàng từ một bảng của cơ sở dữ liệu MySQL và gán nó vào một mảng. Sau đó, lặp qua các phần tử mảng cùng với việc thực hiện một số hành động bằng cách sử dụng vòng lặp foreach

Ngoài ra, xin lưu ý rằng bạn chỉ có thể sử dụng vòng lặp foreach với mảng hoặc đối tượng

Cách sử dụng vòng lặp foreach

Như đã mô tả trong phần đầu tiên, có hai cách để sử dụng vòng lặp foreach trong PHP. Cả hai được mô tả dưới đây

  • Cú pháp để sử dụng phương pháp đầu tiên là

1

2

3

4

5

foreach[$array_name as $value]{

 

echo $giá trị

 

}


 

Theo cách sử dụng vòng lặp foreach này, bạn phải chỉ định tên mảng theo sau là biến $value

Đối với mỗi lần lặp, giá trị của phần tử mảng hiện tại được gán cho biến $value. Sau khi hoàn thành việc lặp, nó sẽ được chuyển sang phần tử tiếp theo cho đến khi tất cả các phần tử của mảng được giải trí

  • Cú pháp sử dụng cách thứ hai

1

2

3

4

5

foreach [$array_name as $key_of_element => $value_of_element]{

 

// mã sẽ được thực thi ở đây

 

}


 

Rõ ràng từ cú pháp, điều này khá hữu ích cho các mảng kết hợp, nơi chúng tôi sử dụng các cặp khóa/giá trị

Vì vậy, với mỗi lần lặp, giá trị của phần tử hiện tại sẽ được gán cho biến $value_of_element, giống như trong phương thức đầu tiên. Ngoài ra, khóa của phần tử được gán cho biến $key_of_element, đây là biến bổ sung trong phương pháp này

Vì vậy, nếu bạn đang làm việc với mảng số, bạn có thể sử dụng phương pháp đầu tiên, nơi bạn không cần khóa của các phần tử

Hầu như mọi ngôn ngữ lập trình đều hỗ trợ vòng lặp foreach và PHP cũng không ngoại lệ. Tôi cá là bạn cũng đã sử dụng nó rất nhiều lần

Không có gì đặc biệt về các vòng lặp foreach trong PHP, nhưng tôi nghĩ có một số sự thật mà bạn nên biết. Các cấu trúc điều khiển vòng lặp được sử dụng mọi lúc, vì vậy điều quan trọng là không mắc lỗi khi sử dụng chúng

 

Trong bài đăng hôm nay, tôi sẽ chỉ cho bạn  6 sự thật mà mọi nhà phát triển PHP nên biết về vòng lặp foreach.

 

 

 

 

 

bản quyền. Hình ảnh của StockUnlimited

 

 

1. ĐÚC CHÌA KHÓA

 

 

PHP có một số tính năng thân thiện với người dùng sẽ giúp người mới bắt đầu và các nhà phát triển ít kinh nghiệm viết mã dễ dàng hơn. Một trong số đó là kiểu tung hứng. trình thông dịch PHP tự động đặt các loại biến tùy thuộc vào ngữ cảnh và toán tử nào được sử dụng

Điều này không có nghĩa là PHP không có các kiểu. Trên thực tế, mỗi biến đều có loại riêng, nhưng nó có thể thay đổi theo thời gian

 

$a = 1 biến $a thành số nguyên và  $a = ‘1’ makes $a a string. In both cases, even if the type is different, a statement like $a = $a + 1 sẽ khiến  $ . becomes an integer.

Mặc dù việc tung hứng kiểu có thể thuận tiện, nhưng điều quan trọng là phải luôn xem xét loại biến mà chúng ta đang xử lý, đặc biệt khi sử dụng các toán tử so sánh nghiêm ngặt [như “ ===“]. Strict comparison operators are very useful because they can differentiate between values like 0, FALSE or NULL, while loose comparison operators [llike “== “] xem xét chúng .

 

Hãy đi thẳng vào vấn đề. Bên trong các vòng lặp foreach, bạn có thể truy cập mọi cặp khóa/giá trị của mảng mà bạn đang lặp lại và đôi khi bạn có thể cần so sánh khóa với một số giá trị khác. Vấn đề là như thế này. nếu và chỉ khi, khóa là một chữ số, thì nó sẽ tự động được chuyển đổi thành một số nguyên khi bắt đầu vòng lặp .

Do đó, so sánh nghiêm ngặt nó với một chuỗi sẽ luôn trả về FALSE

 

Ví dụ sau đây cho thấy rõ vấn đề.  

 


/* We define a two-elements array. Note that the second key is a numeric literal string. */
$array = array[
   'first' => 'first element',
   '2' => 'second element'
];
/* Here is what happens */
foreach [$array as $key => $value]
{
   echo 'Key is: ' . $key . '
'; echo 'Key type is: ' . gettype[$key] . '
'; /* Let's try a comparison */ if [$key === '2'] { echo 'Key is "2"!
'; } else { echo 'Key is NOT "2"!
'; } }

đầu ra là

Khóa là. đầu tiên
Loại khóa là. chuỗi
Khóa KHÔNG phải là “2”.
Khóa là. 2
Loại khóa là. số nguyên
Khóa KHÔNG phải là “2”.

 

Như bạn có thể thấy ở đầu ra, trong khi khóa mảng thứ hai thực sự là một chuỗi [‘2’], nó được tự động chuyển thành một số nguyên bên trong vòng lặp vì nó là một ký tự số. Nếu chúng ta cố gắng so sánh nghiêm ngặt nó với '2', biểu thức sẽ trả về false .

 

Một giải pháp cho vấn đề này là truyền rõ ràng khóa thành chuỗi ở đầu mỗi vòng lặp [trên dòng 13]


/* We define a two-elements array. Note that the second key is a numeric literal string. */
$array = array[
   'first' => 'first element',
   '2' => 'second element'
];
/* Here is what happens */
foreach [$array as $key => $value]
{
   $key = strval[$key];
   echo 'Key is: ' . $key . '
'; echo 'Key type is: ' . gettype[$key] . '
'; /* Let's try a comparison */ if [$key === '2'] { echo 'Key is "2"!
'; } else { echo 'Key is NOT "2"!
'; } }

Lần này đầu ra là

Khóa là. đầu tiên
Loại khóa là. chuỗi
Khóa KHÔNG phải là “2”.
Khóa là. 2
Loại khóa là. chuỗi
Khóa là “2”.

 

Bây giờ, phép so sánh nghiêm ngặt giữa khóa thứ hai và '2' trả về true , như chúng ta mong đợi.

 

 

 

2. SỬA ĐỔI Mảng TỪ BÊN TRONG VÒNG ĐẶT

 

 

 

Nếu bạn đang sử dụng foreach để lặp qua một mảng và bạn muốn sửa đổi chính mảng đó, có hai cách để thực hiện việc đó

Việc đầu tiên là trỏ đến phần tử mảng mà bạn muốn chỉnh sửa bằng cú pháp $array[$key] [vì vậy bạn có .

Một cách khác là xác định $value làm tham chiếu và chỉnh sửa trực tiếp tham chiếu đó

 

Hai ví dụ sau đây cho thấy làm thế nào để làm điều đó


$array = array[1, 2];
foreach [$array as $key => $value]
{
   $array[$key] += 1;
}
print_r[$array];


Chủ Đề