使用预定义键转置PHP多维数组

使用预定义键转置PHP多维数组,php,arrays,multidimensional-array,associative-array,transpose,Php,Arrays,Multidimensional Array,Associative Array,Transpose,我有一个多维数组,有3个键(“长度”、“宽度”和“高度”)。每个键都与一个值数组相关联: $data = [ "length" => ["12", "44"], "width" => ["22", "45"], "height" => ["22", "34"] ]; 如何将每个键的列转换为3列的行,如下所示: $rows = [ ["length" => "12", "width" => "22", "height" => "

我有一个多维数组,有3个键(“长度”、“宽度”和“高度”)。每个键都与一个值数组相关联:

$data = [
    "length" => ["12", "44"],
    "width" => ["22", "45"],
    "height" => ["22", "34"]
];
如何将每个键的列转换为3列的行,如下所示:

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

你可以试试这个,像你说的那样得到数组

   $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);
$height=数组(12,44);
$width=数组(20,50);
$length=数组(30,50);
$new_数组[0]=$height[0];
$new_数组[1]=$width[0];
$new_数组[2]=$length[0];
$new_array 2=$new_array[1];
打印(新阵列);
回声“
”; 打印(新阵列2);
您可以尝试使用此方法获得您所说的阵列

   $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);
$height=数组(12,44);
$width=数组(20,50);
$length=数组(30,50);
$new_数组[0]=$height[0];
$new_数组[1]=$width[0];
$new_数组[2]=$length[0];
$new_array 2=$new_array[1];
打印(新阵列);
回声“
”; 打印(新阵列2);
以下功能将完成此工作:

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;
}
函数转置($data)
{
$result=[];
$keys=数组_键($data);
对于($row=0,$rows=count(重置($data));$row<$rows;$row++){
foreach($key作为$key){
$result[$row][$key]=$data[$key][$row];
}
} 
返回$result;
}

请注意,该函数是一个通用解决方案,它不依赖于键的名称,也不依赖于每个键的条目数。

以下函数将完成此工作:

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;
}
函数转置($data)
{
$result=[];
$keys=数组_键($data);
对于($row=0,$rows=count(重置($data));$row<$rows;$row++){
foreach($key作为$key){
$result[$row][$key]=$data[$key][$row];
}
} 
返回$result;
}

请注意,该函数是一个通用的解决方案,它不依赖于键的名称,也不依赖于每个键的条目数。

迟到了,但这里有一个简单的解决方案

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

foreach ($data as $n => $v) foreach ($v as $vn => $vv) $new[$vn][$n]=$vv;
print_r($new);

晚会迟到了,但这里有一个简单的句型

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

foreach ($data as $n => $v) foreach ($v as $vn => $vv) $new[$vn][$n]=$vv;
print_r($new);

您的表在数据库中的列是什么?您已经尝试获取这两个新数组的内容是什么(我们仍然不讨论ISN插入,只讨论格式化数据)?你知道如何检查输入数组的长度,并比较/确认它们是否具有相同的元素计数吗?你是否使用
for
循环该元素计数,并尝试从现有数组中创建新数组?@YezanRafed其中一个列名是length、width和height。输入数组的长度不固定,可能在某些时候会发生变化@YezanRafedI有Length、width和height列。我想将这些数据保存在数据库的两行中,因为这些数组有两个值。第一个值是一行中所有数组的值,第二个值是另一行中所有数组的值。@YezanRafed。数据库中表的列是什么?您已经尝试获取这两个新数组了哪些内容(我们仍在讨论ISN插入,而只是格式化数据)?你知道如何检查输入数组的长度,并比较/确认它们是否具有相同的元素计数吗?你是否使用
for
循环该元素计数,并尝试从现有数组中创建新数组?@YezanRafed其中一个列名是length、width和height。输入数组的长度不固定,可能在某些时候会发生变化@YezanRafedI有Length、width和height列。我想将这些数据保存在数据库的两行中,因为这些数组有两个值。一行中所有数组的第一个值和另一行中所有数组的第二个值。@YezanRafed。是的,你在新arary中得到第一个索引,但我也想要得到第二个数组。我知道应该使用循环,但我有在这个数组中有10个索引,我可以得到一个元素存储在循环中是的,你在新数组中得到第一个索引,但我也想得到第二个数组。我知道应该使用循环,但可能我在这个数组中有10个索引,我可以得到一个元素存储在循环中