php中的swap(twist)多维数组
我想将2d数组“扭曲”90° 让我解释一下 我有这样一个数组: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
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
快得多。谢谢大家,这正是我在发布第一个答案之前所做的。