2016-01-20 82 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