Duyệt mảng trong php là gì

Mảng PHP là một bản đồ được sắp xếp (chứa giá trị trên cơ sở khóa). Nó được sử dụng để giữ nhiều giá trị cùng loại trong một biến duy nhất


Ưu điểm của Mảng PHP

ít mã hơn. Chúng ta không cần xác định nhiều biến

Dễ dàng đi qua. Với sự trợ giúp của vòng lặp đơn, chúng ta có thể duyệt qua tất cả các phần tử của một mảng

Sắp xếp. Chúng ta có thể sắp xếp các phần tử của mảng


Các kiểu mảng PHP

Có 3 loại mảng trong PHP

  1. Mảng được lập chỉ mục
  2. Mảng kết hợp
  3. Mảng đa chiều

Mảng được lập chỉ mục PHP

Chỉ mục PHP được biểu thị bằng số bắt đầu từ 0. Chúng ta có thể lưu trữ số, chuỗi và đối tượng trong mảng PHP. Tất cả các phần tử mảng PHP được gán cho một số chỉ mục theo mặc định

Trong bài học trước, chúng tôi đã đề cập rằng bạn có thể sử dụng một biến cho chỉ số của một mảng. Bạn thậm chí có thể làm toán với chỉ mục đó và có biểu thức số học bên trong [], như bên dưới

// highScores array declaration
int[] highScores = { 10, 9, 8, 8};
// use a variable for the index
int index = 3;
// modify array value at index
highScores[index] = 11;
// print array value at index
System.out.println(  highScores[index] );
System.out.println(  highScores[index - 1] );

Đoạn mã trên in ra là gì?

Hình 1. Mảng có biến chỉ số

Bài tập mã hóa

Bạn nghĩ đoạn mã sau sẽ in ra là gì? . Sau đó, chạy nó để xem nếu bạn đã đúng. Bạn cũng có thể theo dõi nó trong trình hiển thị bằng cách nhấp vào nút Show Code Lens

6. 2. 2. Đối với các mảng vòng lặp để đi qua

Chúng ta có thể sử dụng phép lặp với vòng lặp for để thăm từng phần tử của mảng. Điều này được gọi là duyệt qua mảng. Chỉ cần bắt đầu chỉ mục từ 0 và lặp lại trong khi chỉ mục nhỏ hơn độ dài của mảng. Lưu ý rằng biến i (viết tắt của chỉ mục) thường được sử dụng trong các vòng lặp làm biến đếm vòng lặp và được sử dụng ở đây để truy cập từng phần tử của một mảng bằng chỉ số của nó

Hình 2. Đối với mảng đi qua vòng lặp

Ví dụ: đây là một vòng lặp đi qua mảng highScores để in mọi điểm số. Thực hiện theo mã dưới đây trong trình hiển thị

int[] highScores = { 10, 9, 8, 11};
for (int i = 0; i < highScores.length; i++)
{
    System.out.println(  highScores[i] );
}

Ghi chú

Sử dụng một biến làm chỉ mục là một tính năng trừu tượng hóa dữ liệu mạnh mẽ vì nó cho phép chúng ta sử dụng các vòng lặp với các mảng trong đó biến bộ đếm vòng lặp là chỉ mục của mảng. Điều này cho phép mã của chúng tôi khái quát hóa để hoạt động cho toàn bộ mảng

Bài tập mã hóa

Bạn nghĩ đoạn mã sau sẽ in ra là gì? . Sau đó, chạy nó để xem nếu bạn đã đúng. Thử nút Code Lens. Sau đó, hãy thử thêm tên của bạn và tên của một người bạn vào tên mảng và chạy lại mã. Mã có hoạt động mà không thay đổi vòng lặp không?

Đoạn mã sau minh họa một vòng lặp thay đổi các giá trị trong một mảng. Trong mã này, mảng được truyền dưới dạng đối số cho các phương thức tĩnh trong lớp. Mảng trong Java là đối tượng. Các biến mảng là tham chiếu đến một địa chỉ trong bộ nhớ. Vì các mảng có thể rất lớn nên chúng ta không muốn sao chép chúng khi truyền chúng vào các phương thức. Khi một mảng được truyền dưới dạng đối số cho một phương thức, tên của mảng đề cập đến địa chỉ của nó trong bộ nhớ. Do đó, bất kỳ thay đổi nào đối với mảng trong phương thức sẽ ảnh hưởng đến mảng ban đầu. Bạn cũng có thể thử mã trong trình hiển thị Java

Bài tập mã hóa

Đoạn mã sau in ra là gì? . Sau đó chạy nó để xem nếu bạn đúng. Lưu ý rằng trong mã này, mảng được truyền dưới dạng đối số cho các phương thức. Bạn cũng có thể thử mã trong trình hiển thị Java bằng nút Code Lens

Ghi chú

Mảng trong Java là đối tượng. Khi các mảng được truyền dưới dạng đối số cho các phương thức, bất kỳ thay đổi nào đối với mảng trong phương thức sẽ ảnh hưởng đến mảng ban đầu, vì tên mảng là một giá trị tham chiếu đề cập đến địa chỉ của mảng trong bộ nhớ

Kiểm tra việc hiểu của bạn

Phương thức sau đây có mã chính xác để trừ amt khỏi tất cả các giá trị trong giá trị mảng, nhưng mã bị lẫn lộn. Kéo các khối từ bên trái vào đúng thứ tự bên phải. Bạn sẽ được thông báo nếu có bất kỳ khối nào sai thứ tự

        public static void subAll(int[] values, int amt)
{
---
     for (int i = 0;
---
        i < values.length;
---
        i++)
---
   {
---
      values[i] = values[i] - amt;
---
   } // end for loop
---
} // end method
        

6. 2. 3. Vòng từ sau ra trước

Bạn không cần phải lặp qua một mảng từ trước ra sau. Bạn có thể lặp bằng cách bắt đầu từ phía sau của mảng và di chuyển về phía trước trong mỗi lần thực hiện vòng lặp. Trong ví dụ bên dưới, phương thức

int[] highScores = { 10, 9, 8, 11};
for (int i = 0; i < highScores.length; i++)
{
    System.out.println(  highScores[i] );
}
0 trả về chỉ số của phần tử cuối cùng trong mảng nhỏ hơn đối số đã cho. Câu lệnh return bên trong vòng lặp dừng việc thực thi vòng lặp và phương thức và trả về chỉ mục được tìm thấy ngay lập tức quay lại phương thức chính. Nó trả về -1 nếu không có số nào trong mảng nhỏ hơn số đã cho

Bài tập mã hóa

Đoạn mã sau in ra là gì? . Theo dõi nó để theo dõi các giá trị mảng và đầu ra. Sau đó chạy nó để xem nếu bạn đúng. Bạn cũng có thể thử mã trong trình hiển thị Java bằng nút Code Lens. Bạn có thể thêm một phương thức khác để tìm chỉ mục của phần tử cuối cùng lớn hơn mục tiêu thay vì nhỏ hơn mục tiêu và yêu cầu bản in chính kiểm tra nó không?

Kiểm tra việc hiểu của bạn

    6-2-6. Đưa ra đoạn mã sau (giống hệt với phương thức trên), kết quả sẽ được trả về khi bạn thực thi. getIndexOfLastElementSmallerThanTarget(values,-13);

    private int[ ] values = {-20, -15, 2, 8, 16, 33};
    
    public static int getIndexOfLastElementSmallerThanTarget(int[ ] values, int compare)
    {
       for (int i = values.length - 1; i >=0; i--)
       {
          if (values[i] < compare)
             return i;
       }
       return -1; // to show none found
    }
    

  • -1
  • Phương thức sẽ chỉ trả về -1 nếu không có giá trị nào trong mảng nhỏ hơn giá trị đã truyền
  • -15
  • Phương thức trả về chỉ mục của mục đầu tiên trong mảng nhỏ hơn giá trị, không phải giá trị
  • 1
  • Vì phương thức lặp từ sau ra trước -15 là giá trị cuối cùng trong mảng nhỏ hơn -13 và nó nằm ở chỉ số 1
  • Bạn sẽ nhận được một lỗi ngoài giới hạn
  • Không, phương pháp bắt đầu chính xác chỉ mục tại các giá trị. độ dài - 1 và tiếp tục miễn là tôi lớn hơn hoặc bằng 0

    6-2-7. Đưa ra đoạn mã sau (giống hệt với phương thức trên), kết quả sẽ được trả về khi bạn thực thi. getIndexOfLastElementSmallerThanTarget(giá trị, 7);

    int[ ] values = {-20, -15, 2, 8, 16, 33};
    
    public static int getIndexOfLastElementSmallerThanTarget(int[] values, int compare)
    {
       for (int i = values.length; i >=0; i--)
       {
          if (values[i] < compare)
             return i;
       }
       return -1; // to show none found
    }
    

  • -1
  • Phương thức sẽ chỉ trả về -1 nếu không có giá trị nào trong mảng nhỏ hơn giá trị đã truyền
  • 1
  • Kiểm tra chỉ số bắt đầu. Nó có đúng không?
  • 2
  • Kiểm tra chỉ số bắt đầu. Nó có đúng không?
  • Bạn sẽ nhận được một lỗi ngoài giới hạn
  • Bạn không thể bắt đầu chỉ mục ở độ dài của mảng. Bạn phải bắt đầu từ độ dài của mảng trừ đi một. đây là một sai lầm phổ biến

6. 2. 4. Lặp qua một phần của mảng

Bạn không cần phải lặp qua tất cả các phần tử của một mảng. Bạn có thể lặp qua một số phần tử của mảng bằng cách sử dụng vòng lặp for. Đoạn mã sau nhân đôi năm phần tử đầu tiên trong một mảng. Lưu ý rằng nó sử dụng một điều kiện phức tạp (

int[] highScores = { 10, 9, 8, 11};
for (int i = 0; i < highScores.length; i++)
{
    System.out.println(  highScores[i] );
}
1) ở dòng 14 để đảm bảo rằng vòng lặp không vượt quá độ dài của mảng, bởi vì nếu bạn có một mảng có ít hơn 5 phần tử, bạn sẽ không muốn mã . Lưu ý rằng trong mã này, mảng là một biến thể hiện riêng của lớp ArrayWorker. Nó được tạo trong hàm tạo và được thay đổi hoặc truy cập bằng các phương thức

Đoạn mã sau sẽ in ra là gì?

Bài tập mã hóa

Bạn thậm chí có thể bắt đầu ở giữa và lặp qua phần còn lại của mảng

Điều này có hoạt động đối với các mảng có số phần tử chẵn không?

Kiểm tra việc hiểu của bạn

    6-2-10. Với các giá trị sau của a và phương thức doubleLast giá trị của a sẽ là bao nhiêu sau khi bạn thực thi. doubleLast()?

    private int[ ] a = {-20, -15, 2, 8, 16, 33};
    
    public void doubleLast()
    {
    
       for (int i = a.length / 2; i < a.length; i++)
       {
          a[i] = a[i] * 2;
       }
    }
    

  • {-40, -30, 4, 16, 32, 66}
  • Điều này sẽ đúng nếu nó lặp qua toàn bộ mảng. Phải không?
  • {-40, -30, 4, 8, 16, 32}
  • Điều này sẽ đúng nếu nó lặp từ đầu đến giữa. Phải không?
  • {-20, -15, 2, 16, 32, 66}
  • Nó lặp từ giữa đến cuối nhân đôi mỗi giá trị. Vì có 6 phần tử nên nó sẽ bắt đầu ở chỉ số 3
  • {-20, -15, 2, 8, 16, 33}
  • Điều này sẽ đúng nếu các phần tử mảng không thay đổi, nhưng chúng có

    6-2-11. Với các giá trị sau của a và phương thức bí ẩn, giá trị của a sẽ là bao nhiêu sau khi bạn thực thi. huyền bí()?

    ________số 8

  • {-40, -30, 4, 16, 32, 66}
  • Điều này sẽ đúng nếu nó lặp qua toàn bộ mảng và nhân đôi mỗi. Phải không?
  • {-40, -30, 4, 8, 16, 33}
  • Điều này sẽ đúng nếu nó lặp từ đầu đến giữa và nhân đôi mỗi. Phải không?
  • {-20, -15, 2, 16, 32, 66}
  • Điều này sẽ đúng nếu nó lặp từ giữa đến cuối và nhân đôi mỗi. Phải không?
  • {-40, -15, 4, 8, 16, 33}
  • Vòng lặp này từ đầu đến giữa và nhân đôi mọi phần tử khác (i+=2 giống như i = i + 2)
  • {-40, -15, 4, 8, 32, 33}
  • Điều này sẽ đúng nếu nó lặp qua toàn bộ mảng và nhân đôi mọi phần tử khác. Phải không?

Chương trình sau đây có mã chính xác để đảo ngược các phần tử trong một mảng, a, nhưng mã bị lẫn lộn. Kéo các khối từ bên trái vào đúng thứ tự bên phải. Bạn sẽ được thông báo nếu có bất kỳ khối nào sai thứ tự

        public static void reverse(int[] a)
{
---
  int temp = 0;
  int half = a.length / 2;
  int max = a.length - 1;
---
  for (int i = 0; i < half; i++)
  {
---
     temp = a[i];
---
     a[i] = a[max - i];
---
     a[max - i] = temp;
---
  } // end for
---
} // end method
        

Chương trình sau đây có mã đúng để trả về giá trị trung bình của 3 mục đầu tiên trong mảng a, nhưng mã bị lẫn lộn. Kéo các khối từ bên trái vào đúng thứ tự bên phải. Bạn sẽ được thông báo nếu có bất kỳ khối nào sai thứ tự hoặc thụt lề không chính xác

int[] highScores = { 10, 9, 8, 11};
for (int i = 0; i < highScores.length; i++)
{
    System.out.println(  highScores[i] );
}
0

6. 2. 5. Các lỗi thường gặp khi lặp qua một mảng

Khi xử lý tất cả các phần tử mảng, hãy cẩn thận bắt đầu từ chỉ mục đầu tiên là

int[] highScores = { 10, 9, 8, 11};
for (int i = 0; i < highScores.length; i++)
{
    System.out.println(  highScores[i] );
}
2 và kết thúc ở chỉ mục cuối cùng. Thông thường các vòng lặp được viết sao cho chỉ số bắt đầu từ 0 và tiếp tục trong khi chỉ số nhỏ hơn
int[] highScores = { 10, 9, 8, 11};
for (int i = 0; i < highScores.length; i++)
{
    System.out.println(  highScores[i] );
}
3 kể từ (arrayName. chiều dài - 1) là chỉ số cho phần tử cuối cùng trong mảng. Đảm bảo rằng bạn không sử dụng <= thay vì ArrayIndexOutOfBoundsException sẽ bị ném. Bị tắt bởi một lỗi, trong đó bạn tắt mảng theo 1 phần tử, rất dễ thực hiện khi duyệt qua một mảng dẫn đến một ArrayIndexOutOfBoundsException bị ném

Kiểm tra việc hiểu của bạn

    6-2-14. Tiêu đề vòng lặp nào sau đây sẽ gây ra lỗi ArrayIndexOutOfBounds khi duyệt qua các điểm của mảng?

  • for (int i = 0; i < điểm. chiều dài;

  • Vòng lặp này sẽ đi qua toàn bộ mảng

  • for (int i = 1; i < điểm. chiều dài;

  • Vòng lặp này sẽ không gây ra lỗi mặc dù nó sẽ không thăm phần tử ở chỉ số 0

  • for (int i = 0; i <= điểm. chiều dài;

  • Chỉ số không thể bằng điểm số. chiều dài, kể từ (điểm. chiều dài - 1) là chỉ mục của phần tử cuối cùng

  • for (int i = 0; điểm. chiều dài > tôi;

  • Mặc dù điều kiện kết thúc có vẻ lạ, (điểm. độ dài > i) tương đương với (i < điểm. chiều dài)

  • cho (int i = điểm. chiều dài - 1;

  • Điều này sẽ gây ra lỗi vì i++ sẽ tiếp tục tăng chỉ số qua phần cuối của mảng. Nó nên được thay thế bằng i– để tránh lỗi này

Bài tập mã hóa

Đoạn mã sau có ArrayIndexOutOfBoundsException. Nó có 2 lỗi thường gặp trong vòng lặp. Bạn có thể sửa nó và làm cho vòng lặp in ra tất cả các điểm không?

Hãy cẩn thận để không nhảy ra khỏi vòng lặp quá sớm khi bạn đang tìm kiếm một giá trị trong một mảng. Phương thức bên dưới sử dụng các câu lệnh trả về để dừng thực thi phương thức và trả về một giá trị cho phương thức đã gọi phương thức này. Tuy nhiên, bạn phải cẩn thận để không dừng vòng lặp quá sớm.

Bài tập mã hóa

Điều gì là sai với mã dưới đây? . Nếu chúng có các ký tự giống nhau theo cùng một thứ tự, nó sẽ trả về 0, nếu không, nó sẽ trả về -1. Nhưng, nó chỉ xử lý một phần tử của mảng. Làm cách nào bạn sửa mã để hoạt động chính xác (xử lý tất cả các phần tử mảng trước khi quay lại)?

    6-2-17. Cho đoạn mã sau, thao tác nào sau đây sẽ gây ra vòng lặp vô hạn?

    int[] highScores = { 10, 9, 8, 11};
    for (int i = 0; i < highScores.length; i++)
    {
        System.out.println(  highScores[i] );
    }
    
    5

  • Các giá trị không quan trọng, điều này sẽ luôn gây ra một vòng lặp vô hạn
  • Một vòng lặp vô hạn sẽ không luôn xảy ra trong đoạn mã này
  • Bất cứ khi nào a bao gồm một giá trị nhỏ hơn hoặc bằng 0
  • Khi a chứa một giá trị nhỏ hơn hoặc bằng 0 thì việc nhân giá trị đó với 2 sẽ không bao giờ làm cho kết quả lớn hơn giá trị tạm thời (được đặt thành một giá trị nào đó > 0), vì vậy một vòng lặp vô hạn sẽ xảy ra
  • Bất cứ khi nào a có giá trị lớn hơn thì temp
  • Các giá trị lớn hơn temp sẽ không gây ra vòng lặp vô hạn
  • Khi tất cả các giá trị trong a lớn hơn temp
  • Các giá trị lớn hơn temp sẽ không gây ra vòng lặp vô hạn
  • Bất cứ khi nào a bao gồm một giá trị bằng temp
  • Các giá trị bằng temp sẽ không gây ra vòng lặp vô hạn

6. 2. 6. Thử thách lập trình. Công cụ kiểm tra chính tả

Chúng tôi khuyến khích bạn làm việc theo cặp cho thử thách này. Đảm bảo rằng bạn đã hoàn thành bài tập mã hóa cuối cùng ở trên, điều này sẽ giúp bạn vượt qua thử thách này

Mã Hoạt động sau đây sử dụng một mảng từ điển gồm 100 từ tiếng Anh phổ biến nhất. Chúng ta có thể sử dụng nó như một công cụ kiểm tra chính tả. Đối với một ứng dụng thực tế hơn, bạn có thể muốn sử dụng thay thế này. thay vào đó, mã có một từ điển khổng lồ các từ tiếng Anh được đọc từ một tệp và cho phép bạn nhập liệu bằng trình kiểm tra chính tả của mình. Nếu bạn sử dụng thay thế, hãy sao chép liên kết cho thay thế của bạn trong cửa sổ Mã hoạt động bên dưới để chuyển nó vào

  1. Viết phương thức print10() in ra 10 từ đầu tiên của mảng từ điển

  2. Viết phương thức kiểm tra chính tả () nhận một từ làm tham số và trả về giá trị true nếu từ đó nằm trong mảng từ điển. Nó sẽ trả về false nếu không tìm thấy. Kiểm tra mã của bạn bên dưới bằng cách thay đổi từ được gửi tới phương thức kiểm tra chính tả() trong chính. Thuật toán này được gọi là tìm kiếm tuyến tính trong đó chúng ta duyệt từng phần tử của mảng (ở đây là từ điển từng từ một) để tìm kiếm một phần tử nhất định

3. Thử thách tùy chọn. Viết phương thức printStartsWith(String) để in ra các từ bắt đầu bằng Chuỗi ký tự trong mảng từ điển. Phương thức của bạn sẽ lấy một tham số cho các chữ cái đầu tiên dưới dạng Chuỗi. Bạn có thể sử dụng phương thức Java String startedWith() tại đây nếu muốn hoặc sử dụng indexOf() để xem liệu firstLetters có ở chỉ mục 0 của chuỗi không. Điều này không được tự động nâng cấp

6. 2. 8. Bản tóm tắt

  • Phép lặp (vòng lặp) có thể được sử dụng để truy cập tất cả các phần tử trong một mảng, duyệt qua mảng

  • Duyệt qua một mảng với vòng lặp for hoặc vòng lặp while được lập chỉ mục yêu cầu các phần tử được truy cập bằng cách sử dụng các chỉ số của chúng

  • Vì chỉ mục của một mảng bắt đầu từ 0 và kết thúc ở số phần tử − 1, nên rất dễ mắc lỗi “tắt bởi một” khi duyệt qua một mảng, dẫn đến một ngoại lệ ArrayIndexOutOfBoundsException bị ném ra

6. 2. 9. trò chơi mảng

Hãy thử trò chơi dưới đây để thực hành các vòng lặp với mảng. Bấm vào Mảng rồi kiểm tra Vòng lặp và bấm vào các phần tử của mảng * sẽ được in ra bằng mã đã cho. Nếu bạn gặp khó khăn, hãy kiểm tra Nhãn để xem các chỉ số. Chúng tôi khuyến khích bạn làm việc theo cặp và xem bạn có thể đạt được bao nhiêu điểm

Đi qua một mảng là gì?

Duyệt một mảng có nghĩa là truy cập từng phần tử (mục) được lưu trữ trong mảng để dữ liệu có thể được kiểm tra hoặc sử dụng như một phần của quy trình. In most high-level languages, it is necessary to create a variable that will track the position of the element currently being accessed.

Chúng ta có thể duyệt qua một mảng không?

Duyệt qua một mảng . Sử dụng vòng lặp for − Thay vì in từng phần tử, bạn có thể lặp chỉ mục bằng cách sử dụng vòng lặp for bắt đầu từ 0 đến độ dài của mảng (ArrayName. length) và truy cập các phần tử tại mỗi chỉ mục. You can traverse through an array using for loop or forEach loop. Using the for loop − Instead on printing element by element, you can iterate the index using for loop starting from 0 to length of the array (ArrayName. length) and access elements at each index.

Các loại mảng khác nhau trong PHP là gì?

Trong PHP, có ba loại mảng. Mảng có chỉ số - Mảng có chỉ số là số . Mảng kết hợp - Mảng có khóa được đặt tên . Mảng nhiều chiều - Mảng chứa một hoặc nhiều mảng .

Làm cách nào để lặp qua mảng trong PHP?

6 cách lặp qua một mảng trong php .
while(biểu thức){ // Đoạn mã được thực thi }
do { // Đoạn mã được thực thi } while(biểu thức);
for (expr1; expr2; expr3) { // Code sẽ được thực thi }
mảng_walk(mảng. đối tượng &$array, gọi lại được $arg, hỗn hợp $arg = null). bool