php中的swap(twist)多维数组

php中的swap(twist)多维数组,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我想将2d数组“扭曲”90° 让我解释一下 我有这样一个数组: array( array( adam , brad , chris , david ), array( 21 , 23 , 22 , 26 ) ) array( array( adam , 21 ), array( brad , 23 ), array( chris , 22 ), array( david , 26 ) ) 我想把它转换成这样的东西: ar

我想将2d数组“扭曲”90°

让我解释一下

我有这样一个数组:

array(
    array( adam , brad , chris , david ),
    array( 21   , 23   , 22    , 26    )
)
array(
    array( adam  , 21 ),
    array( brad  , 23 ),
    array( chris , 22 ),
    array( david , 26 )
)
我想把它转换成这样的东西:

array(
    array( adam , brad , chris , david ),
    array( 21   , 23   , 22    , 26    )
)
array(
    array( adam  , 21 ),
    array( brad  , 23 ),
    array( chris , 22 ),
    array( david , 26 )
)

我怎样才能做到这一点呢?

像这样的方法应该可以奏效:

// Your array stored as $arr

$newArr = array();
for ($i = 0;$i < count($arr[0]); $i++) {
    $newArr[] = array($arr[0][$i],$arr[1][$i]);
}
//您的数组存储为$arr
$newArr=array();
对于($i=0;$i

编辑:您标记了排序,但数组已经排序,是否也要排序?

类似的操作应该可以:

// Your array stored as $arr

$newArr = array();
for ($i = 0;$i < count($arr[0]); $i++) {
    $newArr[] = array($arr[0][$i],$arr[1][$i]);
}
//您的数组存储为$arr
$newArr=array();
对于($i=0;$i

编辑:您标记了排序,但是数组已经排序了,您也要排序吗?

尽管我会抛出一个foreach:

$array = array(
    array('adam', 'brad', 'chris', 'david'),
    array(21, 23, 22, 26)
);

$final_array = array();
foreach ($array[0] as $k => $v)
{
    $final_array[] = array($array[0][$k], $array[1][$k]);
}

print_r($final_array);
在对此的评论中出现一些混乱之后,有人指出,您可以将代码缩减为:

foreach ($array[0] as $k => $v)
{
    $final_array[] = array($v, $array[1][$k]);
}

谢谢Stan,尽管我会在那里扔一个foreach:

$array = array(
    array('adam', 'brad', 'chris', 'david'),
    array(21, 23, 22, 26)
);

$final_array = array();
foreach ($array[0] as $k => $v)
{
    $final_array[] = array($array[0][$k], $array[1][$k]);
}

print_r($final_array);
在对此的评论中出现一些混乱之后,有人指出,您可以将代码缩减为:

foreach ($array[0] as $k => $v)
{
    $final_array[] = array($v, $array[1][$k]);
}

谢谢Stan这里有一个关联数组(一种2d数组):

//采用类似([0]=>('key1'=>'value1','key2'=>'value2'),[1]=>('key1'=>'value45','key2'=>'value3')的数组
//并将其转换为like('key1'=>([0]=>'value1',[1]=>'value45'),'key2'=>([0]=>'value2',[1]=>'value3'))
函数数组_twist(数组$array){
$number\u of_行=计数($array);
$twisted_array=array();
对于($i=0;$i<$u行数;++$i){
$fields=array_键($array[$i]);
foreach($fields作为$field){
$data=$array[$i][$field];
如果($data!=''){
$twisted_数组[$field][]=$data;
}
}
}
返回$U数组;
}

这里有一个用于关联数组(这是一种2d数组):

//采用类似([0]=>('key1'=>'value1','key2'=>'value2'),[1]=>('key1'=>'value45','key2'=>'value3')的数组
//并将其转换为like('key1'=>([0]=>'value1',[1]=>'value45'),'key2'=>([0]=>'value2',[1]=>'value3'))
函数数组_twist(数组$array){
$number\u of_行=计数($array);
$twisted_array=array();
对于($i=0;$i<$u行数;++$i){
$fields=array_键($array[$i]);
foreach($fields作为$field){
$data=$array[$i][$field];
如果($data!=''){
$twisted_数组[$field][]=$data;
}
}
}
返回$U数组;
}

$array[0][$k]
$v
。代码可以简化。@Stan no$数组[0][$k]为0或1或2$v是亚当,布拉德或诸如此类的男人,这就是我要找的。就在一秒钟前,我用for循环和
$array[0][$i]
@Dale做了同样的事情,你错了。如果
$array[0][$k]
将是0、1、2,那么您的代码将不会执行预期的操作(请仔细阅读源代码,您将
$array[0][$k]
放置到结果数组的第一个维度中,因此它必须包含名称,并且确实包含名称)。它工作正常正是因为
$array[0][$k]
$v
,即名称。@斯坦你知道
foreach($array as$k=>$v)
实际上做什么吗?请随意复制并粘贴整个答案到页面中,然后运行代码。
$array[0][$k]
$v
。代码可以简化。@Stan no$数组[0][$k]为0或1或2$v是亚当,布拉德或诸如此类的男人,这就是我要找的。就在一秒钟前,我用for循环和
$array[0][$i]
@Dale做了同样的事情,你错了。如果
$array[0][$k]
将是0、1、2,那么您的代码将不会执行预期的操作(请仔细阅读源代码,您将
$array[0][$k]
放置到结果数组的第一个维度中,因此它必须包含名称,并且确实包含名称)。它工作正常正是因为
$array[0][$k]
$v
,即名称。@斯坦你知道
foreach($array as$k=>$v)
实际上做什么吗?请随意复制并粘贴整个答案到一个页面中,然后运行代码。在这里进行轻微的微优化,将计数($arr[0])转移到循环之外,以停止每次迭代计数,虽然很好的答案得到了我的答案+1@Dale:你说得对,但在这种情况下,它会非常微小,不会有任何区别<代码>for
仍然比
foreach
快得多。谢谢大家,这正是我在发布第一个答案之前所做的。在这里进行轻微的微优化,将计数($arr[0])转移到循环之外,以停止计数每一次迭代,尽管我的答案不错+1@Dale:你说得对,但在这种情况下,它将是如此微小,以至于不会产生任何影响
for
仍然比
foreach
快得多。谢谢大家,这正是我在发布第一个答案之前所做的。