Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menukar panjang tatasusunan dalam php foreach

Bagaimana untuk menukar panjang tatasusunan dalam php foreach

PHPz
PHPzasal
2023-04-24 10:47:50595semak imbas

Dalam PHP, tatasusunan ialah struktur data yang sangat biasa digunakan yang boleh menyimpan berbilang elemen dan melaksanakan pelbagai operasi. Dalam banyak kes, kita perlu menggunakan gelung untuk melintasi tatasusunan dan beroperasi pada elemennya. PHP menyediakan pelbagai pernyataan gelung, antaranya foreach adalah pernyataan yang biasa digunakan.

Walau bagaimanapun, kadangkala apabila kita mengendalikan elemen tatasusunan dalam gelung foreach, panjang tatasusunan mungkin berubah, sekali gus menjejaskan hasil gelung. Artikel ini akan memperkenalkan masalah menukar panjang tatasusunan dalam gelung foreach dan menyediakan beberapa penyelesaian.

1. Pengetahuan asas gelung foreach

Dalam PHP, gelung foreach ialah pernyataan yang merentasi tatasusunan adalah seperti berikut:

foreach ($array as $value) {
    //对 $value 进行操作
}

di mana $ tatasusunan mewakili keperluan Tatasusunan yang dilalui, $value mewakili elemen tatasusunan yang sedang dilalui. Dalam badan gelung, pelbagai operasi boleh dilakukan pada $value, seperti output, pengubahsuaian, dll.

2. Masalah menukar panjang tatasusunan dalam gelung foreach

Apabila menggunakan gelung foreach untuk melintasi tatasusunan, jika anda menambah atau memadam elemen dalam tatasusunan, panjangnya tatasusunan mungkin berubah , sekali gus menjejaskan keputusan kitaran. Mari kita lihat contoh khusus:

$array = [1, 2, 3, 4, 5];
foreach ($array as $value) {
    if ($value == 3) {
        array_splice($array, $value-1, 1);
    }
    echo $value . " ";
}

Apabila merentasi tatasusunan $array, kod di atas menggunakan fungsi array_splice untuk memadamkan elemen dengan nilai 3 apabila ia dilalui. Walau bagaimanapun, kerana panjang $array berubah semasa gelung, output tidak memenuhi jangkaan.

Secara khusus, outputnya ialah:

1 2 4 5

dan bukannya apa yang kami jangkakan:

1 2 4

Ini kerana selepas memadamkan elemen dengan nilai 3 , unsur-unsur dalam tatasusunan akan bergerak ke hadapan satu kedudukan, dan dalam gelung seterusnya, elemen yang sedang dilalui ialah elemen dengan indeks tatasusunan asal 3 (iaitu, nilainya ialah 4). Ini akan menyebabkan satu elemen dalam tatasusunan asal dilangkau semasa proses traversal.

3. Penyelesaian

Pelbagai cara boleh digunakan untuk menyelesaikan masalah di atas. Dua kaedah yang biasa digunakan diperkenalkan di bawah.

(1) Salin tatasusunan

Satu penyelesaian ialah menyalin tatasusunan asal sebelum mengubah suai tatasusunan, kemudian ubah suai tatasusunan baharu, dan akhirnya salin tatasusunan yang diubahsuai Tatasusunan itu disalin semula ke tatasusunan asal. Ini boleh mengelakkan masalah panjang tatasusunan asal berubah.

$array = [1, 2, 3, 4, 5];
$new_array = $array;
foreach ($new_array as $key => $value) {
    if ($value == 3) {
        unset($new_array[$key]);
    }
}
$array = $new_array;
foreach ($array as $value) {
    echo $value . " ";
}

Dalam kod di atas, tatasusunan $array pertama kali disalin ke pembolehubah baharu $new_array, dan operasi pemadaman dilakukan pada tatasusunan baharu. Kemudian salin $new_array yang diubah suai kembali ke array asal $array. Dengan cara ini, anda mendapat hasil yang betul apabila mengeluarkan elemen tatasusunan.

(2) Gunakan gelung tertib terbalik

Penyelesaian lain ialah menggunakan gelung tertib terbalik. Kaedah ini boleh mengelakkan masalah perubahan subskrip semasa mengubah suai tatasusunan.

$array = [1, 2, 3, 4, 5];
foreach (array_reverse($array) as $key => $value) {
    if ($value == 3) {
        unset($array[count($array) - $key - 1]);
    }
    echo $value . " ";
}

Dalam kod di atas, fungsi array_reverse digunakan untuk membalikkan tatasusunan dan operasi memadam dilakukan pada tatasusunan terbalik. Memandangkan subskrip selepas susunan terbalik adalah betul-betul bertentangan dengan subskrip tatasusunan asal, beberapa transformasi diperlukan apabila memadamkan elemen.

Ringkasnya, sama ada anda menyalin tatasusunan atau menggunakan gelung terbalik, anda boleh mengelakkan masalah perubahan panjang tatasusunan dalam gelung foreach dan memastikan hasil traversal yang betul.

4. Ringkasan

Apabila menggunakan gelung foreach untuk melintasi tatasusunan dalam PHP, anda perlu memberi perhatian kepada masalah bahawa menambah dan memadam elemen tatasusunan boleh menyebabkan panjang tatasusunan berubah. . Untuk mengelakkan masalah sedemikian, kaedah seperti menyalin tatasusunan atau menggunakan gelung terbalik boleh digunakan.

Atas ialah kandungan terperinci Bagaimana untuk menukar panjang tatasusunan dalam php foreach. 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