2013-08-24 2 views
0

У меня проблема с массивом, может ли кто-нибудь мне помочь. У меня есть массив A и B со структурой:слияние двух массивов с разным размером

A:

Array 
(
    [0] => 2013-08-01 
    [1] => 2013-08-02 
    [2] => 2013-08-03 
    [3] => 2013-08-04 
) 

и B:

Array 
(
    [0] => Array 
     (
      [0] => 2013-08-01 
      [1] => 2 
      [2] => 0 
      [3] => 0 
     ) 

    [1] => Array 
     (
      [0] => 2013-08-02 
      [1] => 0 
      [2] => 4 
      [3] => 0 
     ) 

    [2] => Array 
     (
      [0] => 2013-08-04 
      [1] => 0 
      [2] => 1 
      [3] => 0 
     ) 
) 

вопрос, я хочу, чтобы объединить TWI ARRAY (A & B) тобе, как это:

Array 
(
    [0] => Array 
     (
      [0] => 2013-08-01 
      [1] => 2 
      [2] => 0 
      [3] => 0 
     ) 
    [1] => Array 
     (
      [0] => 2013-08-02 
      [1] => 0 
      [2] => 4 
      [3] => 0 
     ) 
    [2] => Array 
     (
      [0] => 2013-08-03 
      [1] => 0 
      [2] => 0 
      [3] => 0 
     ) 
    [3] => Array 
     (
      [0] => 2013-08-04 
      [1] => 0 
      [2] => 1 
      [3] => 0 
     ) 

) 

Может ли кто-нибудь мне помочь? как объединить оба массива ..

........

+0

Где эти значения получены от ?: [1] => 2 [2] => 0 [3] => 0 –

+0

из процесса .. –

+0

я не вижу разницы с массива B и комбинированный массив (A и B) – ianace

ответ

0
function combine($a, $b) { 
    foreach($a as $item_a) { 
     foreach($b as $item_b) { 
      if(in_array($item_a, $item_b)) { 
       continue 2; 
      } 
     } 
     $b[] = array(
      $item_a, 0, 0, 0 
     ); 
    } 
    usort($b, function($a, $b){return $a[0] > $b[0];}); 
    return $b; 
} 
+0

Отлично ... спасибо ... –

0
<? 

$a = Array 
(
    "2013-08-01", 
    "2013-08-02", 
    "2013-08-03", 
    "2013-08-04" 
); 

$b = Array 
(
     Array (
      "2013-08-01", 
      2, 
      0, 
      0 
     ), 

     Array (
      "2013-08-02", 
      0, 
      4, 
      0 
     ), 

     Array (
      "2013-08-04", 
      0, 
      1, 
      0 
     ) 
); 

foreach ($a as $a_item) { 
    $found = FALSE; 
    foreach ($b as $b_item) { 
     if($b_item[0]==$a_item) { 
      $found = TRUE; 
     } 
    } 

    if(!$found) { 
     $b[] = Array (
      $a_item, 
      0, 
      0, 
      0 
     ); 

    } 

} 

print_r ($b); 

?> 

Это должно работать, если у вас нет огромного количества данных в массивах. Если у вас есть большой объем данных, вы, вероятно, должны сделать некоторую редизайн, чтобы сделать ее быстрее.

0

Предполагая, что основные даты в массиве B, мой подход был бы перебрать массив А и добавить в массив B, если дата установлено, что это уже не в массиве B.

foreach ($arrA as $datecheck) { 
    $blnAdd = 1; 
    foreach ($arrB as $compare) { 
     if ($compare[0] == $datecheck) { 
      // If found, don't add! 
      $blnAdd = 0; 
     } 
    } 
    if ($blnAdd == 1) { 
     $arrB[] = array($datecheck, 0, 0, 0); 
    } 
} 

// When done, sort array B 
// Create helper array for multisort 
$arrHelper = array(); 
foreach ($arrB as $data) { 
    $arrHelper = $data[0]; 
} 
// Then, sort array B using values from helper array 
array_multisort($arrHelper, $arrB); 

Затем $arrB должен содержать нужные значения.

Смежные вопросы