Bài viết Câu hỏi About RongvangIT
profile Pic
0
0

Đăng ngày:

  46 Lượt xem

[PHP] Mảng / Mảng liên kết - Khởi tạo, Kết hợp, Thêm mới

PHP

1. Khởi tạo Mảng

1-1. Khởi tạo đơn giản

$array = array();

1-2. Khởi tạo & Gán giá trị

1-2-1. Mảng 1 chiều

Trong PHP, không có sự khác biệt giữa “mảng có chỉ số (chỉ số là số nguyên không âm)” và “mảng liên kết (có chỉ số là chuỗi)”. Mảng chỉ có một loại và bạn có thể sử dụng cả chỉ số số nguyên và chỉ số chuỗi trong cùng một mảng.

Ví dụ về mảng có chỉ số

$array = array('apple', 'peach', 'pear'); // Chỉ số từ 0 đến 2

Ví dụ về mảng liên kết (chỉ số được chỉ định)

$array = array('apple' => 'táo', 'peach' => 'đào', 'pear' => 'lê');

Có thể chỉ định một số chỉ số cụ thể

$array = array('banana', 'apple' => 'táo', 'peach' => 'đào', 'pear' => 'lê', 'orange');

Khi in mảng này bằng print_r($array);, kết quả sẽ là:

Array
(
    [0] => banana
    [apple] => táo
    [peach] => đào
    [pear] => lê
    [1] => orange
)

Khởi tạo và thêm mới phần tử sử dụng []

Khi sử dụng [] để thêm phần tử, phần tử sẽ được thêm vào cuối mảng.

$array[] = 'banana';
$array[] = 'orange';
Array
(
    [0] => banana
    [1] => orange
)

Khởi tạo và thêm mới phần tử với chỉ số

$array['banana'] = 'chuối';
$array['orange'] = 'cam';
Array
(
    [banana] => chui
    [orange] => cam
)

Khi chỉ định một khóa (hoặc chỉ số) đã tồn tại, giá trị cũ sẽ bị ghi đè

$array['banana'] = 'chuối';
$array['orange'] = 'cam';
$array['banana'] = 'Philippines';
$array['orange'] = 'Ehime';
Array
(
    [banana] => Philippines
    [orange] => Ehime
)

【Tham khảo】
▼Trang chính thức PHP. “Mảng”
http://php.net/manual/ja/language.types.array.php

1-2-2. Mảng nhiều chiều

Trong PHP, bạn có thể chứa mảng trong mảng, tạo thành mảng nhiều chiều.

Gán giá trị một cách tổng quát

$array = array('fruits' => array('a' => 'cam', 'b' => 'chuối'), 'numbers' => array(1, 3, 5));
Array
(
    [fruits] => Array
        (
            [a] => cam
            [b] => chui
        )

    [numbers] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 5
        )
)

Gán giá trị từng phần tử một

$array['tamura']['height'] = 170;
$array['tamura']['blood'] = 'A';
$array['tamura']['hobbies'] = array('soccer', 'tennis', 'mathematics');
$array['tanaka']['height'] = 165;
$array['tanaka']['blood'] = 'AB';
$array['tanaka']['hobbies'] = array('piano', 'golf');
Array
(
    [tamura] => Array
        (
            [height] => 170
            [blood] => A
            [hobbies] => Array
                (
                    [0] => soccer
                    [1] => tennis
                    [2] => mathematics
                )
        )

    [tanaka] => Array
        (
            [height] => 165
            [blood] => AB
            [hobbies] => Array
                (
                    [0] => piano
                    [1] => golf
                )
        )
)

2. Kết hợp / Thêm mới Mảng

Để kết hợp mảng hoặc thêm mới phần tử, có nhiều cách sử dụng các hàm như array_merge(), array_merge_recursive(), và toán tử +.

2-1. Kết hợp Mảng

2-1-1. Sử dụng hàm array_merge()

Hàm array_merge() được mô tả trên trang chính thức như sau:

  • Nối một hoặc nhiều mảng. Các phần tử của mảng sau được thêm vào phần cuối của mảng trước, và nhận được một mảng mới.
  • Nếu một mảng có các khóa chuỗi giống với các khóa chuỗi khác trong một mảng, giá trị sau đè lên giá trị trước, nhưng mảng sẽ không bị ghi đè, và các giá trị sẽ được thêm vào.
  • Các chỉ số của các phần tử mảng đầu vào trong mảng kết quả sẽ được làm mới bắt đầu từ 0.

Dưới đây là một ví dụ:

$array1 = array('color' => 'đỏ', 10 => 1, 0 => 3);
$array1[] = 100;
$array2 = array('a',

 'b', 'color' => 'xanh', 5);
$array = array_merge($array1, $array2);

print_r($array1);
print_r($array2);
print_r($array);
Array
(
    [color] => đỏ
    [10] => 1
    [0] => 3
    [11] => 100
)
Array
(
    [0] => a
    [1] => b
    [color] => xanh
    [2] => 5
)
Array
(
    [color] => xanh
    [0] => 1
    [1] => 3
    [2] => 100
    [3] => a
    [4] => b
    [5] => 5
)

Ví dụ trên cho thấy:

  • Khi khóa là chuỗi, giá trị được ghi đè.
  • Khi khóa là số, giá trị không bị ghi đè và chỉ số được làm mới từ 0.

【Tham khảo】
▼Trang chính thức PHP. “array_merge”
http://php.net/manual/ja/function.array-merge.php

2-1-2. Sử dụng hàm array_merge_recursive()

Hàm array_merge_recursive() được mô tả trên trang chính thức như sau:

  • Hợp nhất một hoặc nhiều mảng, thêm các giá trị của mảng thứ hai vào cuối mảng thứ nhất. Kết quả là một mảng mới.
  • Nếu một mảng có các khóa chuỗi giống với các khóa chuỗi khác trong một mảng, giá trị của các khóa đó sẽ được hợp nhất thành một mảng, nhưng các khóa khác không bị ảnh hưởng.

Dưới đây là một ví dụ:

$array1 = array('color' => 'đỏ', 10 => 1, 0 => 3);
$array1[] = 100;
$array2 = array('a', 'b', 'color' => 'xanh', 5);
$array = array_merge_recursive($array1, $array2);

print_r($array1);
print_r($array2);
print_r($array);
Array
(
    [color] => đỏ
    [10] => 1
    [0] => 3
    [11] => 100
)
Array
(
    [0] => a
    [1] => b
    [color] => xanh
    [2] => 5
)
Array
(
    [color] => Array
        (
            [0] => đỏ
            [1] => xanh
        )

    [0] => 1
    [1] => 3
    [2] => 100
    [3] => a
    [4] => b
    [5] => 5
)

Trong ví dụ trên:

  • Khi khóa là chuỗi và giá trị có khóa giống nhau, một mảng mới được tạo ra chứa cả hai giá trị.
  • Khóa không giống nhau không ảnh hưởng đến nhau.

【Tham khảo】
▼Trang chính thức PHP. “array_merge_recursive”
http://php.net/manual/ja/function.array-merge-recursive.php

2-1-3. Sử dụng toán tử +

Toán tử + cho phép kết hợp mảng và giữ lại giá trị của khóa từ mảng đầu tiên nếu có xung đột.

Dưới đây là một ví dụ:

$array1 = array('color' => 'đỏ', 10 => 1, 0 => 3);
$array1[] = 100;
$array2 = array('a', 'b', 'color' => 'xanh', 5);
$array = $array1 + $array2;

print_r($array1);
print_r($array2);
print_r($array);
Array
(
    [color] => đỏ
    [10] => 1
    [0] => 3
    [11] => 100
)
Array
(
    [0] => a
    [1] => b
    [color] => xanh
    [2] => 5
)
Array
(
    [color] => đỏ
    [10] => 1
    [0] => 3
    [11] => 100
    [1] => b
    [2] => 5
)

Ví dụ trên cho thấy:

  • Khi có xung đột về khóa, giá trị từ mảng đầu tiên được giữ lại.
  • Các khóa không xung đột được thêm vào mảng kết quả.

【Tham khảo】
▼PHP Array Merge
http://qiita.com/ukisoft/items/55e7c3142dc1388c8264
▼Differences of array_merge, array_recursive, and “+” array operators in PHP
http://www.tam-tam.co.jp/tipsnote/program/post4067.html

2-2. Thêm phần tử vào mảng

2-2-1. Thêm phần tử vào mảng bằng hàm array_push()

array_push(mng, phn_t_thêm[, phn_t_thêm ... ]);

Hàm array_push() sẽ thêm các phần tử từ đối số thứ hai trở đi vào mảng được chỉ định ở đối số đầu tiên. Các phần tử này sẽ được thêm vào cuối của “mảng có chỉ số” và có chỉ số được thêm dưới dạng số nguyên.

$mang1 = array('color'=>'red', 10=>1, 0=>3);
$mang2 = array('a', 'b', 'color'=>'green', 5);
print_r($mang1);
print_r($mang2);

array_push($mang1, $mang2);
print_r($mang1);
Array
(
    [color] => red
    [10] => 1
    [0] => 3
)
Array
(
    [0] => a
    [1] => b
    [color] => green
    [2] => 5
)
Array
(
    [color] => red
    [10] => 1
    [0] => 3
    [11] => Array
        (
            [0] => a
            [1] => b
            [color] => green
            [2] => 5
        )

)

【Trang tham khảo】
▼ Trang chính thức. “array_push”
http://php.net/manual/ja/function.array-push.php
▼ Tổng hợp hành vi khi thêm vào mảng kết hợp bằng nhiều cách trong PHP
http://amanek0.blog.fc2.com/blog-entry-37.html
▼【PHP】 Thêm vào mảng kết hợp và mảng
http://qiita.com/kazu56/items/6947a0e4830eb556d575

2-2-2. Thêm phần tử vào mảng bằng cách sử dụng []

array_push($mang1, $mang2);

$mang1[] = $mang2;

đều có cùng hành vi. Lưu ý rằng, sử dụng [] có vẻ nhanh hơn một chút so với việc sử dụng hàm array_push().

3. Một số hàm hữu ích

3-1. Kiểm tra số lượng phần tử trong mảng

count($mang);

3-2. Hàm foreach()

Việc lặp qua mảng thường được thực hiện thuận lợi với hàm foreach().

$nguoi_dung[] = array('name'=>'tamura', 'age'=>'25');
$nguoi_dung[] = array('name'=>'suzuki', 'age'=>'23');
$nguoi_dung[] = array('name'=>'maki', 'age'=>'29');

foreach($nguoi_dung as $nguoi)
  echo $nguoi['name'] . ' là ' . $nguoi['age'] . " tuổi.\n";
tamura là 25 tui.
suzuki là 23 tui.
maki là 29 tui.

3-3. Thêm khóa vào mảng kết hợp

$nguoi_dung[] = array('name'=>'tamura', 'age'=>'25');
$nguoi_dung[] = array('name'=>'suzuki', 'age'=>'23');
$nguoi_dung[] = array('name'=>'maki', 'age'=>'29');

print_r($nguoi_dung);

$nguoi_dung[0]['gioi_tinh'] = 'nam';
$nguoi_dung[1]['gioi_tinh'] = 'nữ';
$nguoi_dung[2]['gioi_tinh'] = 'nam';

print_r($nguoi_dung);
Array
(
    [0] => Array
        (
            [name] => tamura
            [age] => 25
        )

    [1] => Array
        (
            [name] => suzuki
            [age] => 23
        )

    [2] => Array
        (
            [name] => maki
            [age] => 29
        )

)
Array
(
    [0] => Array
        (
            [name] => tamura
            [age] => 25
            [gioi_tinh] => nam
        )

    [1] => Array
        (
            [name] => suzuki
            [age] => 23
            [gioi_tinh] => n
        )

    [2] => Array
        (
            [name] => maki
            [age] => 29
            [gioi_tinh] => nam
        )

)
dev_pro_it
Đang làm IT tại Japan

Bình luận

Bài viết chưa có bình luận. Hãy trở thành người bình luận đầu tiên!
Sign up for free and join this conversation.
Sign Up
If you already have a RongvangIT account Login
Danh sách thư mục
Bắt đầu ngay với RồngVàngIT - nền tảng chia sẻ kiến thức lập trình tuyệt vời cho kỹ sư Việt Nam!

Hãy đăng nhập để sử dụng hàng loạt các chức năng tuyệt vời của RồngVàngIT !

  1. 1. Bạn sẽ nhận được các bài viết phù hợp bằng chức năng theo dõi tag và người dùng.
  2. 2. Bạn có thể đọc lại các thông tin hữu ích bằng chức năng lưu trữ nội dung.
  3. 3. Chia sẻ kiến thức, đặt câu hỏi và ghi lại quá trình trưởng thành của mình cùng RồngVàngIT !
Tạo tài khoản Đăng nhập
profile Pic