Heim >Backend-Entwicklung >PHP-Tutorial >Wie erzeuge ich das kartesische Produkt eines assoziativen Arrays unter Beibehaltung der Schlüssel?
Kartesisches Produkt finden und dabei Schlüssel in assoziativen Arrays beibehalten
Stellen Sie sich ein assoziatives Array wie das folgende vor:
$input = array( 'arm' => array('A', 'B', 'C'), 'gender' => array('Female', 'Male'), 'location' => array('Vancouver', 'Calgary'), );
Das Ziel besteht darin, das kartesische Produkt dieses Arrays zu finden und dabei die ursprünglichen assoziativen Schlüssel beizubehalten. Die gewünschte Ausgabe wäre:
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' ), ... )
Begründung des Algorithmus
Angenommen, das Eingabearray hat N Unterarrays ($input), jedes mit Cn Elementen, wobei n ist sein Index. Das i-te Element des n-ten Unterarrays wird als Vn,i bezeichnet.
Der Algorithmus beweist (vorausgesetzt, dass keine Fehler vorliegen) durch Induktion:
Angenommen, das Ergebnis enthält bereits das kartesische Produkt des ersten N-1 Unterarrays, es kann wie folgt erweitert werden:
Code-Implementierung
function cartesian($input) { $result = array(); while (list($key, $values) = each($input)) { 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; }<p><strong>Verwendung</strong></p> <pre class="brush:php;toolbar:false">$output = cartesian($input); print_r($output);
Dieser Code gibt das gewünschte kartesische Produkt aus und behält dabei den ursprünglichen Assoziativwert bei Schlüssel.
Das obige ist der detaillierte Inhalt vonWie erzeuge ich das kartesische Produkt eines assoziativen Arrays unter Beibehaltung der Schlüssel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!