Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana Mengira Produk Cartesan Tatasusunan Bersekutu PHP Sambil Mengekalkan Pasangan Nilai Kunci?

Bagaimana Mengira Produk Cartesan Tatasusunan Bersekutu PHP Sambil Mengekalkan Pasangan Nilai Kunci?

Patricia Arquette
Patricia Arquetteasal
2024-12-27 01:40:11848semak imbas

How to Compute the Cartesian Product of PHP Associative Arrays While Preserving Key-Value Pairs?

Mencari Produk Cartesian dengan Tatasusunan Bersekutu PHP, Mengekalkan Pasangan Nilai Kunci

Memandangkan tatasusunan bersekutu dengan berbilang sub-tatasusunan yang mewakili atribut yang berbeza, tugasnya adalah untuk mengira Produk Cartesian sambil mengekalkan kunci dan yang sepadan nilai.

Rasional

Untuk tatasusunan $input dengan N sub-tatasusunan, di mana setiap sub-tatasusunan mempunyai elemen Cn, kita boleh meneruskan dengan aruhan:

  • Untuk N = 1, produk Cartesian hanyalah tatasusunan input sendiri.
  • Dengan mengandaikan kita mempunyai hasil darab Cartesian bagi sub-tatasusunan N-1 yang pertama, kita boleh mengira hasil darab sub-tatasusunan Nth dengan:

    • Dalam setiap item (tatasusunan) dalam produk, tambah pasangan KN => VN,1.
    • Untuk setiap nilai VN,2 hingga VN,CN, tambahkan salinan setiap item pada produk, tukar nilai KN kepada VN,m (untuk semua 2 ≤ m ≤ CN).

Kod

function cartesian($input) {
    $result = [];

    while (list($key, $values) = each($input)) {
        if (empty($values)) {
            continue;
        }

        if (empty($result)) {
            foreach ($values as $value) {
                $result[] = [$key => $value];
            }
        } else {
            $append = [];

            foreach ($result as &$product) {
                $product[$key] = array_shift($values);
                $copy = $product;

                foreach ($values as $item) {
                    $copy[$key] = $item;
                    $append[] = $copy;
                }

                array_unshift($values, $product[$key]);
            }

            $result = array_merge($result, $append);
        }
    }

    return $result;
}

Penggunaan

$input = [
    'arm' => ['A', 'B', 'C'],
    'gender' => ['Female', 'Male'],
    'location' => ['Vancouver', 'Calgary'],
];

print_r(cartesian($input));

Akan mengeluarkan produk Cartesian yang diingini, memelihara kunci dan nilai:

Array
(
    [0] => Array
        (
            [arm] => A
            [gender] => Female
            [location] => Vancouver
        )

    [1] => Array
        (
            [arm] => A
            [gender] => Female
            [location] => Calgary
        )

    [2] => Array
        (
            [arm] => A
            [gender] => Male
            [location] => Vancouver
        )

...etc.

Atas ialah kandungan terperinci Bagaimana Mengira Produk Cartesan Tatasusunan Bersekutu PHP Sambil Mengekalkan Pasangan Nilai Kunci?. 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