Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan putaran tatasusunan dalam php? Pengenalan kepada pelbagai kaedah

Bagaimana untuk melaksanakan putaran tatasusunan dalam php? Pengenalan kepada pelbagai kaedah

PHPz
PHPzasal
2023-04-19 10:06:44514semak imbas

PHP menyediakan banyak fungsi operasi tatasusunan, salah satunya ialah operasi putaran tatasusunan. Putaran tatasusunan merujuk kepada operasi mengubah kedudukan elemen tatasusunan mengikut peraturan tetap, supaya unsur-unsur yang asalnya disusun bersama-sama tersebar dalam kedudukan yang berbeza selepas disusun. Putaran tatasusunan boleh digunakan dalam banyak senario, seperti merombak susunan elemen tatasusunan secara rawak, melaksanakan tinjauan pendapat, membahagi tatasusunan, dsb.

PHP menyediakan pelbagai cara untuk melaksanakan putaran tatasusunan Berikut ialah tiga cara yang biasa digunakan.

1. Gunakan fungsi array_splice

Fungsi array_splice boleh digunakan untuk mengalih keluar sub-tatasusunan panjang yang ditentukan daripada tatasusunan. Kita boleh memutarkan tatasusunan dengan memanggil fungsi ini beberapa kali. Pertimbangkan memutar kanan tatasusunan $a$ sebanyak $k$ bit, yang boleh dicapai mengikut idea berikut:

  1. Keluarkan $k$ elemen terakhir tatasusunan $a$ untuk dibentuk subarray $P$;
  2. Padamkan $k$ elemen tatasusunan $a$ untuk mendapatkan tatasusunan baharu $a'$
  3. Masukkan subarray $P$ ke permulaan daripada kedudukan $a'$ tatasusunan baharu untuk membentuk tatasusunan baharu $a''$.

Kod ini dilaksanakan seperti berikut:

function rotateArray1($arr, $k) {
    $n = count($arr);
    $k = $k % $n; // 取模,防止$k > $n的情况
   
    $p = array_splice($arr, $n - $k, $k);
    $arr = array_merge($p, $arr);
    return $arr;
}

2 Gunakan fungsi array_shift dan array_push

Fungsi array_shift boleh mengeluarkan dan mengembalikan elemen pertama. tatasusunan, dan Fungsi array_push boleh menambah elemen pada penghujung tatasusunan. Kita boleh memutarkan tatasusunan dengan memanggil kedua-dua fungsi ini dalam satu gelung. Perlu diingatkan bahawa walaupun kaedah ini boleh dilaksanakan, kerumitan masa adalah tinggi, kerana setiap panggilan ke array_shift memerlukan keseluruhan tatasusunan untuk digerakkan ke hadapan sebanyak satu bit, jadi apabila $k$ agak besar, kecekapan akan menjadi sangat rendah.

Kod ini dilaksanakan seperti berikut:

function rotateArray2($arr, $k) {
    $k = $k % count($arr); //防止$k > count($arr)的情况
    for ($i = 0; $i < $k; $i++) {
        $elem = array_shift($arr); // 取出第一个元素
        array_push($arr, $elem);  // 将元素放入数组末尾
    }
    return $arr;
}

3 Gunakan subskrip tatasusunan untuk mencapai putaran

Selain menggunakan fungsi operasi tatasusunan, kami juga boleh mencapainya dengan. mengendalikan subskrip tatasusunan secara manual Putaran tatasusunan. Operasi khusus ialah: letakkan elemen dengan subskrip $i$ ke dalam kedudukan dengan subskrip $(i+k)%n$, dengan $n$ ialah panjang tatasusunan dan $k$ ialah bilangan digit untuk putaran kanan . Operasi ini perlu dilaksanakan dalam gelung $n$ kali.

Pelaksanaan kod adalah seperti berikut:

function rotateArray3($arr, $k) {
    $n = count($arr);
    $k = $k % $n;
    for ($i = 0; $i < $n; $i++) {
        $newIndex = ($i + $k) % $n;
        $newArr[$newIndex] = $arr[$i];
    }
    return $newArr;
}

Ketiga-tiga kaedah di atas semuanya boleh melaksanakan operasi putaran tatasusunan Kaedah khusus yang digunakan bergantung pada senario dan skala data yang diperlukan. Perlu diingat bahawa dalam penggunaan sebenar, faktor seperti jenis dan saiz tatasusunan juga perlu dipertimbangkan untuk mengelakkan pelbagai situasi tidak normal yang boleh membawa kepada ralat program.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan putaran tatasusunan dalam php? Pengenalan kepada pelbagai kaedah. 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