Es gibt eine schrullige PHP-Methode, um ein 2D-Array zu transponieren:
$trans = array(
array(1, 2),
array(3, 4),
array(5, 6)
);
array_unshift($trans, null);
$trans = call_user_func_array('array_map', $trans);
var_dump($trans);
Demo
EDIT einfacher Ansatz mit PHP 5.6 Array
Mit der Einführung des Array-Argument Auspacken Auspacken Funktion in PHP 5.6 können wir diese Vereinfachung noch weiter:
$trans = array(
array(1, 2),
array(3, 4),
array(5, 6)
);
$trans = array_map(null, ...$trans);
var_dump($trans);
BEARBEITEN Erläuterung
von den PHP-Dokumente Zitiert für die array_map() function:
eine interessante Anwendung dieser Funktion ist ein Array von Arrays zu konstruieren, die leicht unter Verwendung von NULL als Name der Callback-Funktion durchgeführt werden kann
(siehe Beispiel # 4 von dieser docs Seite für ein Beispiel dafür, was das bedeutet)
Die array_unshift($trans, null)
, dass wir zuerst durchzuführen ist, dass NULL Rückruf bereitstellt, und wir verwenden call_user_func_array()
, weil wir nicht unbedingt wissen, wie viele Werte es in unserem $trans
Array gibt. Was wir tun, dass call_user_func_array()
Verwendung ist das Äquivalent von:
$trans = array_map(NULL, $trans[0], $trans[1], $trans[2]);
für Ihr Beispiel Array, weil die Top-Level des 2-D-Array drei Elemente hat (Tasten 0, 1 und 2).
effektiv, diese NULL Rückruf durchläuft alle Arrays parallel jeden Wert von ihnen wiederum nehmen ein neues Array zu bauen:
$maxArraySize = max(count($array[0], $array[1], $array[2]);
// $maxArraySize will have a value of 2 in your case,
// because your sub-arrays are all equal size
$newArray = [];
for($i = 0; $i < $maxArraySize; ++$i) {
$tmpArray = [];
$tmpArray[] = $array[0][$i];
$tmpArray[] = $array[1][$i];
$tmpArray[] = $array[2][$i];
$newArray[] = $tmpArray[];
}
Es gibt ein paar zusätzliche Kontrollen dort
- Es ist nicht wichtig, ob Ihre Arrays in jeder Dimension assoziativ oder enumeriert sind, da sie auf das Element
$i
und nicht auf den Index
- zugreifen. Wenn die Sub-Arrays nicht alle die gleiche Länge haben, dann ist es effektiv ctively Pads den kürzeren Unteranordnungen mit Nullwerten die Länge der
- längste passen in Es spielt keine Rolle, wie viele Arrays Sie passieren, wird es
mit ihnen allen parallel arbeiten
danke, es ist Arbeit :) –
Ich denke, eine Erklärung, was dieser Code tut, könnte für OP und zukünftige SO Besucher interessant sein :) ZB was die 'array_unshift()' und 'NULL' mit der Signatur von' array_map() 'zu tun haben. Und was könnte helfen, zu verstehen, was hier vor sich geht, wäre, die "statische Version" dieses Codes hinzuzufügen. – Rizier123
Jetzt würde ich sagen, das ist eine ** gute ** Erklärung! Und eine wirklich nette Antwort. – Rizier123