2016-12-17 93 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

是的。一定。 –