2016-12-17 58 views
0

不知道這個問題是否在之前被問過,經過很多搜索後找不到。合併數組中的所有鍵的值php

我的陣列看起來像這樣,

array(3) { 
    [0]=> 
    array(2) { 
    [0]=> 
    array(1) { 
     ["userId"]=> 
     string(3) "421" 
    } 
    [1]=> 
    array(1) { 
     ["userId"]=> 
     string(3) "329" 
    } 
    } 
    [1]=> 
    array(1) { 
    [0]=> 
    array(1) { 
     ["userId"]=> 
     string(3) "329" 
    } 
    } 
    [4]=> 
    array(2) { 
    [0]=> 
    array(1) { 
     ["userId"]=> 
     string(3) "329" 
    } 
    [1]=> 
    array(1) { 
     ["userId"]=> 
     string(3) "421" 
    } 
    } 
} 

我要的是,

array(1) { 
    [0]=> 
    array(5) { 
    [0]=> 
    array(1) { 
     ["userId"]=> 
     string(3) "421" 
    } 
    [1]=> 
    array(1) { 
     ["userId"]=> 
     string(3) "329" 
    } 
    [2]=> 
    array(1) { 
     ["userId"]=> 
     string(3) "329" 
    } 
    [3]=> 
    array(1) { 
     ["userId"]=> 
     string(3) "329" 
    } 
    [4]=> 
    array(1) { 
     ["userId"]=> 
     string(3) "421" 
    } 
    } 
} 

我與array_mergearray_combine嘗試和大量foreach()循環。但沒有得到期望的輸出運氣。

不知道如何做到這一點。請幫忙。

回答

1

你可以扁平化您的數組是這樣的:

$arr = array(array(['user' => 1], ['user' => 2]), ['user' => 3]); 
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)); 
foreach($iterator as $val) { 
    $flattened_arr[0][] = $val; 
} 
var_dump($flattened_arr); 

UPDATE:如果你不想使用RecursiveIteratorIterator的你也可以使用array_walk_recursive()做這樣的:

$non_flat_arr = array(array(['user' => 1], ['user' => 2]), ['user' => 3]); 
$objTmp = (object) array('flat_arr' => array()); 
array_walk_recursive($non_flat_arr, create_function('&$v, $k, &$t', '$t->flat_arr[] = $v;'), $objTmp); 
var_dump([ 0 => $objTmp->flat_arr]); 

這會給你輸出爲:

array:1 [ 
    0 => array:3 [ 
    0 => 1 
    1 => 2 
    2 => 3 
    ] 
] 

希望這有助於!

+0

非常感謝。但是如果'RecursiveIteratorIterator'不支持實時站點服務器呢?(不知道叫做'live site server'的專業或技術上的東西)。 –

+0

@KeyurK - 如果您發現此答案正確且有幫助,請接受&upvote這個答案,因爲它激勵我回答這樣的其他問題,並幫助他人快速找到正確的答案! –

+0

是的。一定。 –