11
votes

Flip (transposez) les rangées et les colonnes d'un tableau 2D sans modifier le nombre de colonnes

Normalement, je vous demanderais comment transformer un tableau à 3 ramifiés à 4 ramifiés, comme celui-ci:

function flip($arr)
{
    $out = array();
    foreach ($arr as $key => $subarr)
    {
        foreach ($subarr as $subkey => $subvalue)
        {
            $out[$subkey][$key] = $subvalue;
        }
    }
    return $out;
}


4 commentaires

Qu'en est-il de array_flip ? Ça ne va pas?


Non, car cela retourne les clés et les valeurs d'un tableau 1D. Ceci est complètement différent.


Des lignes de commutation simples dans des colonnes peuvent être effectuées en utilisant array_column () fonction


array_column () est php> = 5,5


4 Réponses :


11
votes

Placez simplement le tableau dans le bon ordre. En supposant que vous avez des tableaux relativement petits, la solution la plus facile est simplement de créer un tout nouveau tableau pendant cette marche.

Une solution sera de la forme: xxx


0 commentaires

0
votes

Vous allez. Ça marche. :)

démonstration xxx


2 commentaires

J'ai corrigé les fautes de frappe de votre code. Rafraîchissant, il fonctionne comme souhaité. Veuillez éditer votre réponse pour inclure une explication éducative qui profite aux chercheurs. Je voudrais uv les rares réponses correctes sur cette page, mais je n'ai jamais des réponses inexpliquées UV.


D'autre part, cet extrait contient des numéros de numéro de code-magique ( 3 et 4 ), il ne sera donc pas instantanément portable à d'autres cas d'utilisation.



3
votes
function flip_row_col_array($array) {
    $out = array();
    foreach ($array as  $rowkey => $row) {
        foreach($row as $colkey => $col){
            $out[$colkey][$rowkey]=$col;
        }
    }
    return $out;
}

2 commentaires

Cette réponse inexpliquée est exactement ce que l'OP a dit qu'ils étaient pas à la recherche de. Il s'agit d'une technique de transposition classique (laquelle PHP offre déjà une manière native de le faire). Preuve: 3v4l.org/sam2f


OP a dit qu'ils ne le veulent pas.



1
votes

Tout d'abord, ce que vous ne voulez pas (qui est la moitié de la solution à ce que vous voulez) ...

Le terme pour "rangement des lignes et des colonnes" est "transposant". P>

PHP a eu une technique indigène élégante pour cette action même puisque l'opérateur de splat a été ajouté à la langue. P>

Les mises en garde à garder à l'esprit sont les suivantes: p>

  1. Toutes les clés doivent être numériques. L'opérateur Splat / Spread Sheke sur les touches non numériques. LI>
  2. La matrice doit être complète. S'il y a des lacunes, vous ne pouvez pas obtenir le résultat que vous désirez. Li> ol>

    code: ( démo ) p> xxx pré>

    sortie: p> xxx pré>

    maintenant, pour ce que vous voulez! h2>

    Voici un extrait de style fonctionnel qui intègre la technique de transposition de PHP Tout en veillant à ce que la sortie ait le même nombre de colonnes que l'entrée. p>

    code: ( Démo a>) p> xxx pré>

    sortie: p>

    $rows = count($matrix);
    $cols = count(current($matrix));
    $cells = $rows * $cols;
    
    $result = $matrix;  // used to preserve original key orders
    for ($i = 0; $i < $cells; ++$i) {
        $result[$i % $rows][$i / $rows] = $matrix[$i / $cols][$i % $cols];
    }
    var_export($result);
    


0 commentaires