Memandangkan tatasusunan bersekutu, adalah mungkin untuk menentukan produk kartesiannya sambil mengekalkan kuncinya dan menggunakannya dalam batin tatasusunan.
Kita boleh mendekati masalah ini melalui aruhan:
Untuk satu tatasusunan, produk cartesian ialah satu siri tatasusunan dengan pasangan nilai kunci tunggal mewakili setiap item dalam tatasusunan asal.
Andaikan hasil darab susunan N-1 pertama diketahui, sambil menambah tatasusunan N melibatkan:
Untuk setiap produk sedia ada, tambahkan elemen dengan kunci tatasusunan Nth dan nilai pertama Nth tatasusunan.
Mengulangi langkah ini memastikan bahawa hasil darab N adalah dicapai.
$result = array(); foreach ($input as $key => $values) { if (empty($values)) { continue; } if (empty($result)) { foreach($values as $value) { $result[] = array($key => $value); } } else { $append = array(); 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;
}
'arm' => array('A', 'B', 'C'), 'gender' => array('Female', 'Male'), 'location' => array('Vancouver', 'Calgary'),
);
print_r(cartesian($input));
[0] => Array ( [arm] => A [gender] => Female [location] => Vancouver ) [1] => Array ( [arm] => A [gender] => Female [location] => Calgary ) [2] => Array ( [arm] => A [gender] => Male [location] => Vancouver )
...dll.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Produk Cartesian Tatasusunan Bersekutu PHP sambil Memelihara Kunci?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!