2016-01-20 79 views
0

我工作的一个项目,由于2-天,我正在堆积,这是我的问题:我有两个arrays,想检索每个对象中的第二项Array_2concatenate它在第一个Array_1PHP中的每个对象的内容。如何连接阵列元素递归

Array_1

[[1453274700000,24011],[1453275000000,24222],[1453275300000,24284],[1453275600000,24331],...] 

Array_2

[[1453274700000,51951],[1453275000000,52093],[1453275300000,52251],[1453275600000,52288],...] 

Wanted_array

[[1453274700000,24011,51951],[1453275000000,24222,52093],[1453275300000,24284,52251],[1453275600000,24331,52288]...] 
+1

你有没有尝试过自己?为什么它不工作?这应该相当简单:在数组1和数组2中创建一个循环,并将项0(例如'1453274700000')保存为键和项1(例如'24011')作为值。在此之后,简单地通过他们两个并且匹配钥匙。如果数组的排序总是相同的,可以用一个'for'循环来完成。 – h2ooooooo

+0

你的意思是将这些数组合并成每个数组的相等索引? –

回答

1

一种功能性溶液:

$result = array_map(function (array $a1, array $a2) { 
    return array_merge($a1, [$a2[1]]); 
}, $array_1, $array_2); 

这假定所有项目都是按顺序排列的,只需要按顺序合并,而不是按其第一个值合并。

0

使用array_walk并添加$array2如果它存在的第二项。

$array1 = array(
    array(1453274700000,24011), 
    array(1453275000000,24222), 
    array(1453275300000,24284), 
    array(1453275600000,24331) 
    ); 

$array2 = array(
    array(1453274700000,51951), 
    array(1453275000000,52093), 
    array(1453275300000,52251), 
    array(1453275600000,52288), 
    ); 


array_walk($array1, function(&$item, $key) use ($array2){ 
    if(isset($array2[$key][1])){ 
     $item[] = $array2[$key][1]; 
    } 
}); 

print_r($array1); 

输出

Array 
(
    [0] => Array 
     (
      [0] => 1453274700000 
      [1] => 24011 
      [2] => 51951 
     ) 

    [1] => Array 
     (
      [0] => 1453275000000 
      [1] => 24222 
      [2] => 52093 
     ) 

    [2] => Array 
     (
      [0] => 1453275300000 
      [1] => 24284 
      [2] => 52251 
     ) 

    [3] => Array 
     (
      [0] => 1453275600000 
      [1] => 24331 
      [2] => 52288 
     ) 

) 

EDIT

作为@ h2ooooooo指出,有可能是可能性,即数组项是按随机顺序。如果阵列项目可以按随机顺序和它们与第一指标值匹配,使用这个(工作与PHP> = 5.5.0):

$array1 = array(
    array(1453274700000,24011), 
    array(1453275000000,24222), 
    array(1453275300000,24284), 
    array(1453275600000,24331), 
    array(1453276000000,24222) // no match in $array2 
    ); 

$array2 = array(
    array(1453275000000,52093), 
    array(1453274700000,51951), 
    array(1453275300000,52251), 
    array(1453275600000,52288), 
    ); 


array_walk($array1, function(&$item, $key) use ($array2){ 
    // Find match in $array2 
    $array2_key = array_search($item[0], array_column($array2, 0)); 
    // If match found 
    if($array2_key !== false && isset($array2[$array2_key][1])){ 
     $item[] = $array2[$array2_key][1]; 
    } 
    // No match 
    else{ 
     $item[] = null; 
    } 
}); 

print_r($array1); 

输出

Array 
(
    [0] => Array 
     (
      [0] => 1453274700000 
      [1] => 24011 
      [2] => 51951 
     ) 

    [1] => Array 
     (
      [0] => 1453275000000 
      [1] => 24222 
      [2] => 52093 
     ) 

    [2] => Array 
     (
      [0] => 1453275300000 
      [1] => 24284 
      [2] => 52251 
     ) 

    [3] => Array 
     (
      [0] => 1453275600000 
      [1] => 24331 
      [2] => 52288 
     ) 

    [4] => Array 
     (
      [0] => 1453276000000 
      [1] => 24222 
      [2] => 
     ) 

) 
0

如果你想$item[0]来定义每个值属于哪个“组”,您可以遍历第一个数组,并将$item[0]保存为密钥,将$item[1]保存为值。对第二个数组做同样的事情。现在遍历array1保存的数组,并检查保存的array2数组是否包含相同的键。执行相同的数组2(如果它具有密钥阵列1没有),并保存到一个新的数组:

<?php 

$arr1 = array(
     array('1453274700000',24011), 
     array('1453275000000',24222), 
     array('1453276000000',24222), // inexistent in $arr2 
    ); 

$arr2 = array(
     array('1453275000000',52093), 
     array('1453274700000',51951), 
     array('1453273000000',24222), // inexistent in $arr1 
    ); 

$arr1dictionary = []; 
$arr2dictionary = []; 
$result = []; 

foreach ($arr1 as $collection) { 
    $arr1dictionary[$collection[0]] = $collection[1]; 
} 

foreach ($arr2 as $collection) { 
    $arr2dictionary[$collection[0]] = $collection[1]; 
} 

foreach ($arr1dictionary as $key => $value) { 
    if (isset($arr2dictionary[$key])) { 
    $result[$key] = [$key, $value, $arr2dictionary[$key]]; 
    } else { 
    $result[$key] = [$key, $value, null]; 
    } 
} 

foreach ($arr2dictionary as $key => $value) { 
    if (isset($result[$key])) { 
    continue; 
    } 

    $result[$key] = [$key, null, $value]; 
} 

$result = array_values($result); 

print_r($result); 

输出

Array 
(
    [0] => Array 
     (
      [0] => 1453274700000 
      [1] => 24011 
      [2] => 51951 
     ) 

    [1] => Array 
     (
      [0] => 1453275000000 
      [1] => 24222 
      [2] => 52093 
     ) 

    [2] => Array 
     (
      [0] => 1453276000000 
      [1] => 24222 
      [2] => (null, the value only exists in $arr1) 
     ) 

    [3] => Array 
     (
      [0] => 1453273000000 
      [1] => (null, the value only exists in $arr2) 
      [2] => 24222 
     ) 

) 

DEMO