J'ai un tableau multidimensionnel avec 3 clés ("longueur", "largeur" et "hauteur). Chaque clé est associée à un tableau de valeurs:

$data = [
    "length" => ["12", "44"],
    "width" => ["22", "45"],
    "height" => ["22", "34"]
];

Comment puis-je transposer les colonnes de chaque clé en lignes de 3 colonnes comme suit:

$rows = [
    ["length" => "12", "width" => "22", "height" => "22"],
    ["length" => "44", "width" => "45", "height" => "34"]
]; 
1
sepide 5 mai 2020 à 12:41

3 réponses

Meilleure réponse

La fonction suivante fera le travail:

function transpose($data)
{
    $result = [];
    $keys = array_keys($data);
    for ($row = 0,  $rows = count(reset($data)); $row < $rows; $row++) {
        foreach ($keys as $key) {
            $result[$row][$key] = $data[$key][$row];
        }
    } 

    return $result;
}

Notez que la fonction est une solution générale elle ne dépend pas du nom des touches ni du nombre d'entrées de chaque touche.

1
Yezan Rafed 5 mai 2020 à 23:15

Voulez-vous les enregistrer dans une base de données différente ou dans la même base de données? si vous enregistrez dans la même base de données? La structure du tableau changera-t-elle car elle est dynamique, comme dans un certain temps vous aurez

"lenght" => array:2 [▼
    0 => "12"
    1 => "44"
  ]
  "width" => array:2 [▼
    0 => "22"
    1 => "45"
  ]
  "height" => array:2 [▼
    0 => "22"
    1 => "34"
  ]

Et une autre fois vous aurez

"width" => array:2 [▼
    0 => "12"
    1 => "44"
  ]
  "length" => array:2 [▼
    0 => "22"
    1 => "45"
  ]
  "something different" => array:2 [▼
    0 => "22"
    1 => "34"
  ]
0
Hacktor Developer 5 mai 2020 à 10:04

Vous pouvez essayer celui-ci pour obtenir les tableaux comme vous l'avez dit

   $height = array(12,44);
$width = array(20,50);
$length = array(30,50);
$new_array[0] = $height[0];
$new_array[1] = $width[0];
$new_array[2] = $length[0];
$new_array2 = $new_array[1];
print_r($new_array);
echo "<br>";
print_r($new_array2);
0
Tanvir Ahmed 5 mai 2020 à 10:24