Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Kaedah penapisan untuk tatasusunan pelbagai dimensi php

Kaedah penapisan untuk tatasusunan pelbagai dimensi php

PHPz
PHPzasal
2023-04-18 09:47:26863semak imbas

Memproses data dalam PHP ialah keperluan yang sangat biasa, dan tatasusunan berbilang dimensi ialah salah satu daripada struktur data biasa. Walau bagaimanapun, apabila menggunakan tatasusunan berbilang dimensi, kami tidak boleh mengelak daripada melakukan beberapa operasi penapisan data untuk memastikan ketepatan dan kesahihan data. Artikel ini akan memperkenalkan kaedah penapisan tatasusunan berbilang dimensi dalam PHP.

1. Kaedah penapisan array_map

array_map() ialah fungsi yang disediakan oleh PHP yang boleh menghantar setiap elemen dalam satu atau lebih tatasusunan kepada fungsi panggil balik tersuai yang ditentukan Dan mengembalikan tatasusunan baharu, iaitu elemen yang merupakan elemen yang diproses oleh fungsi panggil balik.

Kita boleh menggunakan fungsi array_map() untuk melaksanakan penapisan tatasusunan berbilang dimensi. Kaedah khusus adalah dengan terlebih dahulu melintasi tatasusunan berbilang dimensi, menghantar elemen yang perlu ditapis ke fungsi penapis untuk pemprosesan, dan kemudian menyimpan hasil yang diproses ke tatasusunan baharu. Berikut ialah contoh mudah:

// 多维数组
$data = array(
    array(
        'name' => '张三',
        'age' => 18,
        'sex' => 'male',
        'hobby' => array('swimming', 'reading', 'music'),
    ),
    array(
        'name' => '李四',
        'age' => 22,
        'sex' => 'female',
        'hobby' => array('swimming', 'dancing', 'shopping'),
    ),
);

// 过滤函数
function filter($item) {
    if (!is_array($item)) { 
        return trim($item); // 非数组的元素进行trim()处理
    } else { 
        return array_map('filter', $item); // 数组的元素递归调用filter()函数进行处理
    }
}

$new_data = array_map('filter', $data); // 过滤后的多维数组

Dalam contoh di atas, kami mentakrifkan penapis fungsi penapis(), yang menentukan sama ada elemen itu ialah tatasusunan dan memanggil trim() yang disediakan oleh PHP pada bukan tatasusunan elemen. Fungsi menjalankan pemprosesan, secara rekursif memanggil dirinya sendiri untuk memproses elemen tatasusunan, dan akhirnya menyimpan hasil yang diproses ke tatasusunan $new_data baharu melalui fungsi array_map().

2. Kaedah penapisan array_walk_recursive

array_walk_recursive() ialah fungsi yang disediakan oleh PHP Ia boleh menggunakan fungsi yang ditentukan pengguna untuk setiap elemen dalam tatasusunan berbilang dimensi : Parameter pertama ialah nilai elemen semasa, dan parameter kedua ialah nama kunci elemen semasa. Untuk menapis data tatasusunan, kita boleh menggunakan fungsi ini untuk melintasi unsur-unsur dalam tatasusunan secara rekursif satu demi satu, dan kemudian memproses unsur-unsur yang perlu ditapis. Berikut ialah kod sampel:

// 多维数组
$data = array(
    array(
        'name' => '张三',
        'age' => 18,
        'sex' => 'male',
        'hobby' => array('swimming', 'reading', 'music'),
    ),
    array(
        'name' => '李四',
        'age' => 22,
        'sex' => 'female',
        'hobby' => array('swimming', 'dancing', 'shopping'),
    ),
);

// 过滤函数
function filter(&$value, $key) {
    if (is_string($value)) {
        $value = trim($value); // 对字符串类型进行trim()处理
    }
}

array_walk_recursive($data, 'filter'); // 过滤后的多维数组

Dalam contoh di atas, kami mentakrifkan penapis fungsi panggil balik(), yang menerima dua parameter Parameter pertama $value ialah nilai elemen semasa dan parameter kedua Parameter pertama $key ialah nama kunci bagi elemen semasa. Gunakan fungsi is_string() untuk menentukan sama ada elemen semasa adalah daripada jenis rentetan Jika ya, panggil fungsi trim() yang disediakan oleh PHP untuk diproses.

Selepas fungsi penapis ditakrifkan, kami melaksanakan operasi traversal pada tatasusunan berbilang dimensi dengan memanggil fungsi array_walk_recursive(), hantar setiap elemen ke fungsi panggil balik untuk pemprosesan, dan akhirnya mendapatkan hasil yang ditapis.

3. Kaedah penapisan array_filter

array_filter() ialah fungsi yang disediakan oleh PHP yang boleh menapis tatasusunan yang diberikan mengikut fungsi panggil balik yang ditentukan. Ia berulang melalui setiap elemen dalam tatasusunan dan menggunakan fungsi panggil balik untuk setiap elemen Nilai pulangan ialah tatasusunan elemen yang menilai kepada BENAR dalam fungsi panggil balik.

Kita boleh menggunakan fungsi array_filter() untuk menapis tatasusunan berbilang dimensi. Kaedah khusus adalah untuk melintasi elemen dalam tatasusunan berbilang dimensi dan menyimpan elemen yang memenuhi syarat penapisan ke dalam tatasusunan baharu. Berikut ialah contoh mudah:

// 多维数组
$data = array(
    array(
        'name' => '张三',
        'age' => 18,
        'sex' => 'male',
        'hobby' => array('swimming', 'reading', 'music'),
    ),
    array(
        'name' => '李四',
        'age' => 22,
        'sex' => 'female',
        'hobby' => array('swimming', 'dancing', 'shopping'),
    ),
);

// 过滤函数
function filter($item) {
    return (strlen($item['name']) > 2); // 过滤满足条件的元素
}

$new_data = array_filter($data, 'filter'); // 过滤后的多维数组

Dalam contoh di atas, kami mentakrifkan penapis fungsi panggil balik(), yang digunakan untuk memproses elemen yang perlu ditapis. Dalam fungsi penapis(), kami mengembalikan TRUE untuk elemen yang memenuhi syarat tertentu (di sini panjang 'nama' lebih besar daripada 2), jika tidak, kami mengembalikan FALSE. Selepas fungsi penapis ditakrifkan, kami memanggil fungsi array_filter() dan lulus tatasusunan untuk ditapis dan fungsi penapis untuk mendapatkan hasil yang ditapis.

Ringkasnya, kita boleh menggunakan pelbagai kaedah untuk menapis tatasusunan berbilang dimensi, termasuk fungsi seperti array_map(), array_walk_recursive() dan array_filter(). Kaedah yang hendak dipilih bergantung pada senario dan keperluan aplikasi tertentu.

Atas ialah kandungan terperinci Kaedah penapisan untuk tatasusunan pelbagai dimensi php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn