Ngu ngơ học làm web (60) - Thao tác trên mảng - phần 2

Tiếp theo của: Ngu ngơ học làm web (59) - Thao tác trên mảng – phần 1
------

Phần 60.       Thao tác trên mảng – phần 2

Đây là clip số 27:


Duyệt các phần tử của mảng bằng “con trỏ” mảng. Ví dụ:

- current($array): truy xuất phần tử hiện tại của mảng

- end($array): truy xuất phần tử cuối cùng của mảng

- next($array): truy xuất phần tử sau phần tử hiện tại của mảng

- prev($array): truy xuất phần tử trước phần tử hiện tại của mảng

- reset($array): quay về vị trí đầu tiên trong mảng

Để chuyển đổi một mảng (chuỗi hoặc đối tượng) về một chuỗi đặc biệt để lưu vào cơ sở dữ liệu, sử dụng hàm serialize($value).

Ví dụ,

<?php
    $things = array(
      'mon' => 'Monday',
      'tue' => 'Tuesday',
      'wed' => 'Wednesday',
      0 => 'table',
      1 => 'book');

    $result = serialize($things);
    echo $result;  
  ?>

Kết quả xuất ra là:

a:5:{s:3:"mon";s:6:"Monday";s:3:"tue";s:7:"Tuesday";s:3:"wed";s:9:"Wednesday";i:0;s:5:"table";i:1;s:4:"book";}

Để chuyển đổi một chuỗi đặc biệt thành một mảng ban đầu, sử dụng hàm unserialize($value). Ví dụ,

<?php
    $things = array(
      'mon' => 'Monday',
      'tue' => 'Tuesday',
      'wed' => 'Wednesday',
      0 => 'table',
      1 => 'book');

    $result = serialize($things);
    echo $result;
    $newArr = unserialize($result);
    echo '<br>';
    echo '<pre>';
    print_r($newArr);
    echo '</pre>'; 
  ?>

Kết quả xuất ra màn hình là:

a:5:{s:3:"mon";s:6:"Monday";s:3:"tue";s:7:"Tuesday";s:3:"wed";s:9:"Wednesday";i:0;s:5:"table";i:1;s:4:"book";}

Array
(
    [mon] => Monday
    [tue] => Tuesday
    [wed] => Wednesday
    [0] => table
    [1] => book
)

Để xáo trộn các phần tử trong một mảng, sử dụng hàm shuffle($array).

Để tạo ra một mảng từ các biến có sẵn, sử dụng hàm compact(). Trong đó, tên các biến được dùng làm key của mảng, và giá trị của các biến là value tương ứng. Ví dụ:

$name = 'Teo';
            $age = 15;
            $array = compact('name', 'age');

Để tạo mảng từ một dãy giá trị liên tục, sử dụng hàm range(). Ví dụ, $array = range(0, 10);

Để tạo mảng từ hai mảng khác, trong đó có một mảng đóng vai trò là key và mảng còn lại đóng vai trò là value, sử dụng hàm array_combine(); Ví dụ,

$newArray = array_combine($key, $array); trong đó $key là mảng thứ nhất, $value là mảng thứ hai.

Đây là clip số 28:


Để so sánh giá trị (value) khác nhau của hai mảng, sử dụng hàm array_diff($array1, $array2); hàm này trả về một mảng mới, bao gồm các phần tử có giá trị tồn tại trong $array1 nhưng không tồn tại trong $array2.

Để so sánh chỉ số (key) khác nhau của hai mảng, sử dụng hàm array_diff_key($array1, $array2); hàm này trả về một mảng mới, bao gồm các phần tử có chỉ số tồn tại trong $array1 nhưng không tồn tại trong $array2.

Để so sánh giá trị (value) và chỉ số (key) khác nhau của hai mảng, sử dụng hàm array_diff_assoc($array1, $array2); hàm này trả về một mảng mới, bao gồm các phần tử có giá trị và chỉ số tồn tại trong $array1 nhưng không tồn tại trong $array2.

Để so sánh giá trị (value) giống nhau của hai mảng, sử dụng hàm array_intersect($array1, $array2); hàm này trả về một mảng mới, bao gồm các phần tử có giá trị tồn tại trong cả $array1 và $array2.

Để so sánh chỉ số (key) giống nhau của hai mảng, sử dụng hàm array_intersect_key($array1, $array2); hàm này trả về một mảng mới, bao gồm các phần tử có chỉ số tồn tại trong cả $array1 và $array2.

Để so sánh giá trị (value) và chỉ số (key) giống nhau của hai mảng, sử dụng hàm array_intersect_assoc($array1, $array2); hàm này trả về một mảng mới, bao gồm các phần tử có giá trị và khóa tồn tại trong cả $array1 và $array2.

Tới đây, thấy bản thân có vấn đề về cách dùng từ “chỉ số” để dịch từ “key”. Đây là cách dùng từ theo thói quen. Có vẻ không ổn! Tự thắc mắc là trong các mảng mà chỉ số mảng là các số nguyên thì người ta thường dùng từ “index” nghĩa là “chỉ số” để truy cập đến các phần tử của mảng. Tuy nhiên, trong các mảng mà người ta không dùng “chỉ số” (ví dụ, 0, 1, 2, 3,…) để truy cập tới các phần tử nữa mà dùng cả “chuỗi” thì cách dùng từ “chỉ số” có vẻ không đúng. Và thấy họ dùng từ “key” cũng là có lý của họ, “key” là “khóa”, là cái duy nhất để truy cập tới một phần tử trong mảng. Vì vậy, từ đây sẽ sửa lại cách dùng từ, sẽ dùng từ “khóa” thay cho “chỉ số”.

Đây là clip số 29:


Hàm array_walk dùng để gửi các giá trị của mảng đến một hàm nào đó để xử lý và nhận kết quả trả về là một mảng mới. Ví dụ,

$array = array(
                                    'mon' => 'Monday',
                                    'tue' => 'Tuesday',
                                    'wed' => 'Wednesday',
                                    0          => 'table',
                                    1          => 'book');     
                       
function myFunction($value, $key) {
                                    echo $key.' -> '.$value.'<br>';
                        }
                       
                        array_walk($array, myFunction);

Có thể truyền tham số ($param) cho hàm array_walk, ví dụ:

$array = array(
                                    'mon' => 'Monday',
                                    'tue' => 'Tuesday',
                                    'wed' => 'Wednesday',
                                    0          => 'table',
                                    1          => 'book');     
                        function myFunction($value, $key, $param = ':') {
                                    echo $key.$param.$value.'<br>';
                        }
                       
                        array_walk($array, myFunction, '->');

Một ví dụ khác về truyền tham số ($param) cho hàm array_walk(),

$array = array(1, 2, 3, 4);
                        function myFunction(&$value, $key, $param = 2) {
                                    $value = $value * $param;
                        }

                        array_walk($array, myFunction, 3);

                        echo '<pre>';
                        print_r($array);
                        echo '</pre>';

Hàm array_map dùng để gửi các giá trị của một hoặc nhiều mảng đến một hàm nào đó để xử lý và nhận kết quả trả về là một mảng mới. Ví dụ,

$array = array(1, 2, 3, 4);
                        function checkNumber($number) {
                                    $result = ($number % 2 == 0) ? 'chan' : 'le';
                                    return $result;
                        }

                        $newArray = array_map(checkNumber, $array);

                        echo '<pre>';
                        print_r($newArray);
                        echo '</pre>';

Thêm một ví dụ nữa về array_map,

$array1 = array(1, 2, 3, 4);
                        $array2 = array(5, 6, 7, 8);
                        function myFunction($n1, $n2) {
                                    $result = $n1 * $n2;
                                    return $result;
                        }

                        $newArray = array_map(myFunction, $array1, $array2);

                        echo '<pre>';
                        print_r($newArray);
                        echo '</pre>';

Đây là clip số 30:


Để trích xuất một đoạn phần tử của mảng, sử dụng hàm array_slice(array, offset, length, preserve), hàm này sẽ trích xuất từ mảng array, bắt đầu từ phần tử offset, lấy length phần tử. Ví dụ,

$array = array(1, 2, 3, 4, 5, 6);
            $newArray = array_slice($array, 1, 2);

Kết quả xuất $newArray là:

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

Tham số preserve có hai giá trị: true (giữ nguyên giá trị key từ mảng gốc) và false (giá trị key trong mảng mới được bắt đầu từ 0).

Để thay thế một đoạn phần tử của mảng, sử dụng hàm array_splice(array1, offset, length, array2); hàm này sẽ xóa bỏ một đoạn phần tử của array1, từ vị trí offset, xóa length phần tử, sau đó thay thế các phần tử bị xóa bằng array2.

Ví dụ,

$array1 = array(1, 2, 3, 4, 5, 6);
                        $array2 = array('a','b','c');
                       
                        $newArray = array_splice($array1, 1, 2, $array2);

                        echo '<pre>';
                        print_r($array1);
                        echo '</pre>';

Kết quả xuất ra là,

Array
(
    [0] => 1
    [1] => a
    [2] => b
    [3] => c
    [4] => 4
    [5] => 5
    [6] => 6
)

Để sắp xếp mảng theo giá trị, sử dụng hàm sort(array) – sắp xếp tăng dần theo giá trị, hàm rsort(array) – sắp xếp giảm dần theo giá trị.


Để sắp xếp mảng theo khóa, sử dụng hàm ksort(array) – sắp xếp tăng dần theo khóa, hàm krsort(array) – sắp xếp giảm dần theo khóa.
-----------
Cập nhật [26/10/2017][18/11/2016]
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web