[PHP cơ bản] Dữ liệu mảng (Array)

Bài này thuộc phần 11 của 15 phần trong serie PHP cho WordPress Developer

Trong phần các kiểu dữ liệu (Data Types), mình có nói sơ qua về mảng nhưng do tính chất quan trọng của mảng trong lập trình PHP nên mình xin nói kỹ hơn ở bài viết này.

Mảng (Array) là gì?

Mảng là một kiểu dữ liệu mà nó có thể chứa nhiều giá trị con bên trong. Hãy tưởng tượng như một mảng là một quyển sách, mỗi trang sách bên trong là giá trị (value) được đánh số bằng số trang (key).

Để tạo mảng, chúng ta sử dụng hàm array() trong PHP (Từ PHP 5.4 trở lên bạn chỉ cần viết giá trị trong cặp dấu [] cũng được). Ví dụ bên dưới là tạo một biến hứng mảng.

<?php
$mang = array( 'WordPress', 'CSS', 'PHP', 'Javascript' );

echo '<pre>';
var_dump( $mang );
echo '</pre>';
?>

Kết quả bạn có như sau:

array(4) {
  [0]=>
  string(9) "WordPress"
  [1]=>
  string(3) "CSS"
  [2]=>
  string(3) "PHP"
  [3]=>
  string(10) "Javascript"
}

Và bạn thấy, chúng ta có một mảng có 4 giá trị (array(4)). Trong đó nó có 4 key đánh số từ [0] đến [3] cho 4 giá trị tương ứng. Mỗi giá trị bên trong nó sẽ hiển thị kèm theo tên kiểu dữ liệu. Như vậy bạn có thể hiểu, WordPress, CSS, PHP, Javascript là giá trị trong mảng $mang mà ta dump ra. Các key nó sẽ tự động gán khi khởi tạo mảng.

Để lấy giá trị trong mảng như ý muốn của mình, chúng ta sẽ lấy ra bằng cách viết tên biến kèm theo key cần lấy giá trị như sau:

<?php
$mang = array( 'WordPress', 'CSS', 'PHP', 'Javascript' );

echo $mang[2]; // in PHP ra
?>

Mảng không tuần tự

Ở trên bạn đã làm quen với mảng cơ bản, và mặc định khi chúng ta khai báo giá trị vào mảng mà nó tự đánh số thứ tự cho các key bên trong thì ta gọi đó là mảng tuần tự. Nhưng trong nhiều trường hợp chúng ta có mảng quá bự, muốn tự đặt tên key cho dễ nhớ thì ta gọi đó là mảng không tuần tự.

Để khai báo tên key kèm giá trị, chúng ta chỉ việc viết giá trị là ‘tên_key' => 'giá_trị' vào mảng.

<?php
$web = array(
'wp'    =>    'WordPress',
'css'    => 'CSS',
'php'    => 'PHP',
25        => 100
);

echo '<pre>';
var_dump( $web );
echo '</pre>';
?>

Tên key có thể là dữ liệu kiểu chuỗi, kiểu số tự nhiên, số trôi nổi, dữ liệu mảng.

Mảng đa chiều

Mảng đa chiều chỉ đơn giản là một mảng chứa nhiều giá trị mảng lồng bên trong, tức là nó vẫn có key nhưng giá trị lại là một mảng mới. Ví dụ:

<?php
$web =
    array(
    'php'    =>
        array(
        'wp'    => 'WordPress',
        'joomla'    => 'Joomla',
        'drupal'    => 'Drupal',
        'mt'    =>    'Magento'
        ),
    'asp'    =>
        array(
        'netnuke'    =>    'DotNetNuke',
        'kentico'    =>    'Kentico CMS'
        )
    );

echo '<pre>';
    print_r($web);
echo '</pre>';
?>

Và để lấy giá trị của mảng đa chiều, bạn có thể sử dụng vòng lặp (chưa học tới) hoặc viết tên biến kèm theo tên key của mảng mẹ và tên key của mảng con như $web['php']['mt'].

Tips: Đối với mảng, bạn có thể dùng hàm print_r() để dump thay vì sử dụng hàm var_dump() nếu không cần xem loại kiểu dữ liệu của giá trị.

Các hàm làm việc với mảng trong PHP

Khi làm việc với mảng, bạn có thể sẽ cần sử dụng một số hàm có sẵn trong PHP để thao tác với mảng. Dưới đây là một số hàm thông dụng để làm việc với mảng.

Xem thêm: Danh sách các hàm làm việc với mảng

sizeof( $arr )

Hàm sizeof() được sử dụng để in ra tổng số phần tử có bên trong một mảng. Lưu ý là nó không thể đếm được toàn bộ phần tử trong mảng đa chiều.

<?php

    $name = array('John', 'David', 'Mickey', 'Jackson', 'Binladen');

    echo '<pre>';
    echo 'Có '. sizeof($name) . ' cái tên.';
    echo '</pre>';
?>

array_values( $arr )

Hàm array_values() sẽ rất có ích nếu như bạn muốn tạo ra một mảng mới và mảng mới này sẽ chứa toàn bộ giá trị của mảng được sử dụng trong hàm này.

<?php
    $hero = array(
        'name'    => 'Thạch',
        'age'    => '23',
        'race'    => 'Human',
        'Weapon'    => 'Rocket'
    );

    $thach = array_values( $hero );

    print_r( $thach );
?>

array_keys( $arr )

Nếu như hàm array_values() sẽ bóc toàn bộ giá trị trong mảng bỏ vào một mảng mới thì hàm array_keys() sẽ bóc toàn bộ key trong mảng bỏ vào một mảng mới.

<?php
$hero = array(
    'name'    => 'Thạch',
    'age'    => '23',
    'race'    => 'Human',
    'Weapon'    => 'Rocket'
);

$class = array_keys( $hero );

print_r( $class );
?>

each( $arr )

Đây là một hàm mà nó thường dùng kèm với vòng lặp (thường là vòng lặp while) để in ra một cặp key và giá trị của nó. Thực ra cái này cũng không thường được sử dụng cho lắm nhưng mà nó có thể giúp bạn sử dụng cùng lúc cả key và giá trị linh hoạt.

<?php
$hero = array(
    'name'    => 'Thạch',
    'age'    => '23',
    'race'    => 'Human',
    'Weapon'    => 'Rocket'
);

while( list($key, $value) = each( $hero )) {
    echo "$key - $value <br>";
}
?>

array_reverse( $arr )

Hàm này được sử dụng để đảo ngược thứ tự giá trị trong mảng.

<?php
    $number = array(25,44,23,15,53,75);

    echo '<pre>';
    print_r ( array_reverse( $number ) );
    echo '</pre>'
?>

array_merge( $arr1, $arr2,… )

Hàm này được sử dụng để gộp các dữ liệu của hai hoặc nhiều mảng lại với nhau.

<?php
    $number = array(10,20,30,40);
    $name = array("John","Thạch","Wun","Ciu");

    echo '<pre>';
    print_r( array_merge( $number, $name ) );
    echo '</pre>';
?>

join( $spec, $arr )

Hàm này có tác dụng sẽ lấy toàn bộ giá trị trong mảng và có thể cách nhau bằng một ký tự nhất định. Ví dụ dưới đây là lấy toàn bộ giá trị ra ngoài và cách nhau bởi dấu phẩy.

<?php
    $name = array("John","Thạch","Wun","Ciu");

    echo join( ',', $name );

?>

Ngoài ra hàm này còn có một cái tên khác nữa đó là implode().

Các hàm sắp xếp mảng

Nếu bạn cần thiết lập lại thứ tự các giá trị bên trong mảng thì có thể sử dụng các hàm sau đây:

  • sort() – Xếp mảng theo thứ tự tăng dần.
  • rsort() – Xếp mảng theo thứ tự giảm dần.
  • asort() – Xếp mảng theo thứ tự tăng dần, dựa vào giá trị.
  • ksort() – Xếp mảng theo thứ tự tăng dần, dựa vào key.
  • arsort() – Xếp mảng theo thứ tự giảm dần, dựa vào giá trị.
  • krsort() – Xếp mảng theo thứ tự giảm dần, dựa vào key.

Lời kết

Đấy, về khái niệm mảng trong PHP thì chỉ có bấy nhiêu thôi nhưng nó quan trọng là vì nó được sử dụng nhiều và rất linh hoạt trong nhiều trường hợp. Ví dụ khi bạn sử dụng nhiều hàm trong WordPress như get_terms() chẳng hạn, nó sẽ trả về giá trị kiểu mảng và lúc đó bạn sẽ làm việc với nó để lấy dữ liệu mà bạn cần. Về vấn đề này mình sẽ giải thích kỹ hơn ở bài các hàm thông dụng trong WordPress.

Bài tập thực hành

  • Tạo ra một mảng với biến tên là my_post.
  • Trong mảng đó sẽ có 5 key tên (giá trị tự đặt) theo yêu cầu Kiểu – tên key – giá trị như sau:
    1. String – title – Học PHP cơ bản
    2. String – content – Đây là nội dung của bài học PHP cơ bản
    3. Array – tag – php,php cơ bản
    4. Array – category – PHP, WordPress
    5. String – author – Thạch Phạm
  • Hiển thị giá trị của các key ra ngoài website (nên định dạng bằng HTML cho dễ đọc).

Bài giải

<?php
$my_posts = array(
    'title'    => 'Học PHP cơ bản',
    'content' => 'Nội dung học PHP cơ bản',
    'tag'    => array('php','php cơ bản'),
    'category'    => array('PHP', 'WordPress'),
    'author'    => 'Thạch Phạm'
);
?>

<div class="post">
<h1><?php echo $my_posts['title']; ?></h1>
<p><?php echo $my_posts['content']; ?></p>

<?php // Lấy giá trị trong tag và thêm dấu -
$tags = join('-', $my_posts['tag']);
?>
<p>Tags: <?php echo $tags; ?></p>

<?php // Lấy giá trị trong category và thêm dấu ,
$cats = join(',', $my_posts['category']);
?>
<p>Category: <?php echo $cats; ?></p>

<p>Tác giả: <?php echo $my_posts['author']; ?></p>
</div>
Thạch Phạm

Đam mê với web và lập trình, thích viết và chia sẻ, nghiện cà phê và xăm mình, hứng thú với nhạc dân ca và nhạc không lời.

Xem thêm bài viết Subscribe
Do mình về Việt Nam có công việc nên tạm đóng bình luận tới ngày 28/02/2017 vì trong thời gian này mình không hỗ trợ được. Chân thành cáo lỗi về sự bất tiện này.
menu
menu
Hãy ấn nút chia sẻ nếu bạn thấy bài viết có ích!