2011-09-13 45 views
1

因此,假設您有3個數組:PHP:取幾個數組,並基於共享索引創建新數組?

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)); 
?> 

似乎並沒有被工作,雖然,甚至$清洗反應是一個數組的數組。

+2

請發佈您迄今爲止嘗試使用的代碼。 – helloandre

+2

我會看看這裏提供的答案:http://stackoverflow.com/questions/2815162/is-there-a-php-function-like-pythons-zip – sberry

+0

請發佈'var_export()'的預期結果 – sanmai

回答

2

大多喜歡亞歷克斯·巴雷特的答案,但允許未知數量的陣列。

<?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)); 
+0

完美的作品!多謝兄弟。 –

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); 
+0

不起作用。 $ d結束於$ a $ b和$ c的計數($ a)副本。 – rrehbein

+0

修正:$ a [$ i]而不是$ a,$ b和$ c相同 – Sotomajor

+0

如果我不知道有多少個數組,我需要添加額外的語句,不是嗎? –

1

如果你的陣列都是相同的長度,你可以把你想與null爲回調參數array_map功能很多。

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)); 

這是一個documented trick,所以相當安全使用。

+0

通常我會說這是正確的,但OP不知道他會有多少陣列。 – meteorainer

+0

@meteorainer爲什麼這很重要?它仍然有效... – DaveRandom

+0

,因爲你必須將未知數量的數組加載到array_map中。如果這些是以編程方式生成的數組,則無法做到這一點。 – meteorainer

-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 
     } 

    } 
} 
0
$ret = array(); 
for ($i =0; $i < count($input[0]); $i++){ 
    $tmp = array(); 
    foreach ($input as $array) { 
     $tmp[] = $array[$i]; 
    } 
    $ret[] = $tmp;  
} 
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); 
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; 
    } 
?> 
相關問題