PHP:获取几个数组,并根据共享索引创建新数组?

时间:2011-09-13 15:04:59

标签: php arrays

所以,想象你有3个数组:

1,2,3,4,5
6,7,8,9,10
11,12,13,14,15

并且您希望将它们组合到基于索引的新数组中:

1,6,11
2,7,12
3,8,13
4,9,14
5,10,15

到底能实现这一目标?此外,数组的总数尚不清楚。

编辑:到目前为止,这是我的代码片段(从数据库中提取数据):

<?php
$ufSubmissions = $wpdb->get_results( $wpdb->prepare("SELECT * FROM wp_user_feedback WHERE user = '$ufUser' ORDER BY date DESC") );


$cleanedResponses = array();

foreach ($ufSubmissions as $submission) {
    $cleanedResponses[] = unserialize($submission->responses);
}

array_map(null, $cleanedResponses));
?>

似乎没有工作,即使是$ clean响应也是一个数组数组。

7 个答案:

答案 0 :(得分:2)

大多数情况下像Alex Barrett的答案,但允许使用未知数量的数组。

<?php

$values = array(
    array(1,2,3,4,5),
    array(6,7,8,9,10),
    array(11,12,13,14,15),
);

function array_pivot($values)
{
    array_unshift($values, null);
    return call_user_func_array('array_map', $values);

}

print_r(array_pivot($values));

答案 1 :(得分:1)

如果您的数组长度相同,则可以将array_map函数传递给null函数,并将array_map(null, array(1, 2, 3, 4, 5), array(6, 7, 8, 9, 10), array(11, 12, 13, 14, 15)); 作为回调参数。

array(array(1, 6, 11),
      array(2, 7, 12),
      array(3, 8, 13),
      array(4, 9, 14),
      array(5, 10, 15));

以上将返回以下二维数组:

{{1}}

这是一个documented trick,使用起来非常安全。

答案 2 :(得分:0)

Em ......问题是什么?如果它们的大小相同,那么你可以

<?php
$a = array(1,2,3,4,5);
$b = array(6,7,8,9,10);
$c = array(11,12,13,14,15);

$d = array();

for ($i = 0; $i < sizeof($a); $i++) {
  $d[] = array($a[$i], $b[$i], $c[$i]);
}

var_dump($d);

答案 3 :(得分:0)

$ret = array();
for ($i =0; $i < count($input[0]); $i++){
    $tmp = array();
    foreach ($input as $array) {
        $tmp[] = $array[$i];
    }
    $ret[] = $tmp;      
}

答案 4 :(得分:0)

// This takes an unlimited number of arguments and merges into arrays on index
// If there is only 1 argument it is treated as an array of arrays
// returns an array of arrays
function merge_on_indexes () {
  $args = func_get_args();
  $out = array();
  if (count($args) == 1) for ($i = 0; isset($args[0][$i]); $i++) for ($j = 0; isset($args[0][$i][$j]); $j++) $out[$j][] = $args[0][$i][$j]; else for ($i = 0; isset($args[$i]); $i++) for ($j = 0; isset($args[$i][$j]); $j++) $out[$j][] = $args[$i][$j];
  return $out;
}

// Usage examples
// Both return array('data1','data3','data5'),array('data2','data4','data6')

$arr1 = array('data1','data2');
$arr2 = array('data3','data4');
$arr2 = array('data5','data6');
$result = merge_on_indexes($arr1,$arr2);
print_r($result);

$multiDimArr = array(
  array('data1','data2'),
  array('data3','data4'),
  array('data5','data6')
);
$result = merge_on_indexes($multiDimArr);
print_r($result);

答案 5 :(得分:0)

这是未经测试的,请阅读它以获取想法而不是粘贴它。

重点是将所有内容全部放在Feed中,然后将其重新分配到最大长度的新数组中,最后一个数组不能满。

<?php

  // initial vars

  $max_size = 3; // of the new arrays
  $total_array = $a + $b + $c; // the three arrays summed in the right order
  $current_size = length($total_array);
  $num_of_arrays = ceil($current_size / $max_size);

  // redistributing

  $result_arrays = array();
  for($i = 0; $i < $num_of_arrays; $i++){ // iterate over the arrays
    $new_array= array();
    for($t = 0; $t < $max_size){
     $pos = $num_of_arrays * $t + $i;
     if(isset($total_array[$pos]) {
       $new_array[] = $total_array[$pos];
     }
    }
    $result_arrays[] = $new_array;
  }
?>

答案 6 :(得分:-1)

$arr = get_defined_vars();  //gets all your variables
$arrCount = 0;

$arrOfarrs = array();

foreach($arr as $var){    //go through each variable
    if(is_array($var)){   //and see if it is an array
       $arrCount++;       //we found another array
       for($i == 0;$i < count($var); $i++){   //run through the new array
           $arrOfarrs[$i][] == $var[$i];   //and add the corresponding elem
       } 

    }
}