Rumah > rangka kerja php > Laravel > teks badan

Analisis komprehensif penggantian tatasusunan ThinkPHP

PHPz
Lepaskan: 2023-04-21 14:08:11
asal
749 orang telah melayarinya

Memanipulasi tatasusunan ialah tugas biasa semasa menulis program PHP. Dalam projek ThinkPHP, selalunya perlu menggantikan nilai tertentu dalam tatasusunan, seperti menggantikan semua rentetan kosong ('') dalam tatasusunan dengan nol. Artikel ini akan memperkenalkan anda kepada pelbagai kaedah penggantian tatasusunan dalam ThinkPHP.

1. Penggantian tatasusunan biasa

Pertama, mari kita lihat kaedah penggantian tatasusunan biasa. Katakan kita mempunyai tatasusunan $arr, yang mengandungi empat elemen:

$arr = tatasusunan(

'name' => '张三',
'age' => 18,
'email' => 'zhangsan@example.com',
'gender' => '男',
Salin selepas log masuk
Salin selepas log masuk

);

Jika kita mahu menambah semua elemen dalam tatasusunan Untuk menggantikan rentetan kosong dengan null, anda boleh menggunakan gelung foreach untuk melintasi tatasusunan dan menggantikan setiap elemen. Kodnya adalah seperti berikut:

foreach ($arr as &$value) {

if ($value === '') {
    $value = null;
}
Salin selepas log masuk
Salin selepas log masuk

}

Di mana, &$value mewakili rujukan kepada elemen tatasusunan , supaya anda boleh Mengubah suai tatasusunan asal secara langsung. Selepas menjalankan kod di atas, nilai $arr akan menjadi:

array(

'name' => '张三',
'age' => 18,
'email' => 'zhangsan@example.com',
'gender' => '男',
Salin selepas log masuk
Salin selepas log masuk

);

Jika anda ingin menggantikan nilai kunci yang ditentukan nama, anda boleh Tambah pertimbangan bersyarat pada gelung, kodnya adalah seperti berikut:

foreach ($arr as $key => &$value) {

if ($key === 'email' && $value === 'zhangsan@example.com') {
    $value = 'lisi@example.com';
}
Salin selepas log masuk

}

Dalam kod di atas, kami telah menggantikan nilai nama kunci e-mel, iaitu, menggantikan 'zhangsan@example.com' dengan 'lisi@example.com' Jika anda menjalankan kod ini, nilai $ arr akan menjadi:

array (

'name' => '张三',
'age' => 18,
'email' => 'lisi@example.com',
'gender' => '男',
Salin selepas log masuk

);

Tetapi kaedah ini mempunyai kelemahan Jika tatasusunan adalah besar, kecekapan menggunakan gelung untuk melintasi dan penggantian akan menjadi sangat rendah. Jadi kita perlu mencari kaedah penggantian yang lebih cekap.

2. Penggantian tatasusunan rekursif

Jika kita perlu menggantikan semua rentetan kosong dalam tatasusunan berbilang dimensi dengan nol, maka menggunakan gelung tidak lagi mencukupi. Pada masa ini, kita boleh menggunakan kaedah rekursif untuk melintasi keseluruhan tatasusunan dan mengulangi setiap sub-tatasusunan sehingga elemen paling asas ditemui untuk diganti.

Kod adalah seperti berikut:

function array_replace_recursive_null($arr) {

foreach ($arr as $key => &$value) {
    if (is_array($value)) {
        $value = array_replace_recursive_null($value);
    } elseif ($value === '') {
        $value = null;
    }
}
return $arr;
Salin selepas log masuk

}

Dalam kod di atas, kami mula-mula menentukan sama ada elemen semasa ialah Array, jika ya, panggil fungsi array_replace_recursive_null() secara rekursif untuk menggantikan, jika tidak, tentukan sama ada elemen semasa ialah rentetan kosong, dan jika ya, gantikannya dengan null.

Gunakan fungsi ini untuk menggantikan tatasusunan, kodnya adalah seperti berikut:

$arr = array(

'name' => '张三',
'age' => 18,
'contact' => array(
    'email' => 'zhangsan@example.com',
    'phone' => '',
    'address' => array(
        'province' => '广东省',
        'city' => '',
        'district' => '番禺区',
    ),
),
Salin selepas log masuk
Salin selepas log masuk

);
$arr = array_replace_recursive_null( $arr) ;

Jika anda menjalankan kod di atas, nilai $arr akan menjadi:

array(

'name' => '张三',
'age' => 18,
'contact' => array(
    'email' => 'zhangsan@example.com',
    'phone' => null,
    'address' => array(
        'province' => '广东省',
        'city' => null,
        'district' => '番禺区',
    ),
),
Salin selepas log masuk
Salin selepas log masuk

);

Penggantian tatasusunan rekursif berfungsi untuk Penggantian keseluruhan tatasusunan berbilang dimensi, tetapi penggantian nilai tunggal masih memerlukan penggunaan lintasan gelung.

3. Gunakan fungsi array_map() untuk menggantikan

Fungsi array_map() dalam PHP boleh menggunakan fungsi panggil balik yang ditentukan untuk setiap elemen dalam tatasusunan dan mengembalikan tatasusunan baharu. Kita boleh menggunakan fungsi ini untuk menggantikan nilai dalam tatasusunan.

Andaikan kita mempunyai tatasusunan yang mengandungi data berikut:

$arr = tatasusunan('epal', 'oren', 'pisang', '');

Kami Jika anda ingin menggantikan rentetan kosong dengan null, anda boleh menggunakan fungsi array_map() dan fungsi panggil balik.

Kodnya adalah seperti berikut:

fungsi replace_null($value) {

return $value === '' ? null : $value;
Salin selepas log masuk

}
$arr = array_map('replace_null', $arr) ;

Dalam kod, kami menulis fungsi panggil balik replace_null() Jika $value ialah rentetan kosong, ia mengembalikan null, jika tidak ia mengembalikan $value. Fungsi ini kemudiannya diluluskan sebagai fungsi panggil balik kepada fungsi array_map() untuk melengkapkan penggantian nilai dalam tatasusunan.

4. Gunakan fungsi array_walk_recursive() untuk menggantikan fungsi

array_walk_recursive() digunakan untuk menggunakan fungsi yang ditentukan pengguna secara rekursif pada setiap elemen tatasusunan atau objek. Sama seperti array_map(), tetapi boleh melintasi tatasusunan berbilang dimensi secara rekursif. Kita boleh menggunakan fungsi ini untuk menggantikan semua nilai dalam tatasusunan berbilang dimensi.

Andaikan kita mempunyai tatasusunan berbilang dimensi $arr, yang mengandungi beberapa rentetan kosong:

$arr = tatasusunan(

'name' => '张三',
'age' => 18,
'contact' => array(
    'email' => 'zhangsan@example.com',
    'phone' => '',
    'address' => array(
        'province' => '广东省',
        'city' => '',
        'district' => '番禺区',
    ),
),
Salin selepas log masuk
Salin selepas log masuk

);

Sekarang , kita perlu menggantikan semua rentetan kosong dengan null. Ini boleh dicapai menggunakan fungsi array_walk_recursive() dan fungsi panggil balik.

Kodnya adalah seperti berikut:

fungsi replace_null_recursive(&$value, $key) {

if ($value === '') {
    $value = null;
}
Salin selepas log masuk
Salin selepas log masuk

}
array_walk_recursive($arr, 'replace_null_recursive' );

Dalam kod, kami menulis fungsi panggil balik replace_null_recursive(), jika $value ialah rentetan kosong, gantikannya dengan null, dan kemudian hantar fungsi ini sebagai fungsi panggil balik kepada fungsi array_walk_recursive().

Selepas menjalankan kod di atas, nilai $arr akan menjadi seperti berikut:

array(

'name' => '张三',
'age' => 18,
'contact' => array(
    'email' => 'zhangsan@example.com',
    'phone' => null,
    'address' => array(
        'province' => '广东省',
        'city' => null,
        'district' => '番禺区',
    ),
),
Salin selepas log masuk
Salin selepas log masuk

);

5

Artikel ini memperkenalkan pelbagai kaedah menggantikan tatasusunan dalam projek ThinkPHP, termasuk penggantian tatasusunan biasa, penggantian tatasusunan rekursif, penggantian menggunakan fungsi array_map() dan penggantian menggunakan fungsi array_walk_recursive(). Setiap kaedah mempunyai senario yang boleh digunakan, dan memilih kaedah yang paling sesuai berdasarkan situasi sebenar boleh menjimatkan masa dan tenaga.

Akhir sekali, saya harap artikel ini dapat membantu pembaca dan dapat menyelesaikan tugas dengan lebih cekap apabila berurusan dengan penggantian tatasusunan.

Atas ialah kandungan terperinci Analisis komprehensif penggantian tatasusunan ThinkPHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan