2013-08-30 2 views
0

У меня есть два массива массивов. здесь является демонстрация двух массивов для простоты: $ строк массива:слияние двух массивов с разными данными в один, используя php

Array ([0] => Array ([Badge] => Adrian [Denied] => 2 [Correct] => 9) 
     [1] => Array ([Badge] => Adriann [Denied] => 3 [Correct] => 6) 
     [2] => Array ([Badge] => newAd [Denied] => 0 [Correct] => 4)) 

и $ overrides_array:

Array ([0] => Array ([Badge] => Adrian [Override] => 2) 
     [1] => Array ([Badge] => newAd [Override] => 1) 
     [2] => Array ([Badge] => AntonRapid [Override] => 1)) 

Теперь я хочу, чтобы объединить эти два массива в один таким образом, что я в конечном итоге с followwing:

Array ([0] => Array ([Badge] => Adrian [Denied] => 2 [Correct] => 9 [Override] => 2) 
     [1] => Array ([Badge] => Adriann [Denied] => 3 [Correct] => 6 [Override] => 0) 
     [2] => Array ([Badge] => newAd [Denied] => 0 [Correct] => 4 [Override] => 1) 
     [2] => Array ([Badge] => AntonRapid [Denied] => 0 [Correct] => 0 [Override] => 1) 
    ) 

до сих пор я придумал следующий уродливый код, но он не будет работать в случае некоторых бейджей:

$result_array = array(); 
    $counter = 0; 
    foreach ($rows as $row){ 
     //$counter = 0; 
     if(count($override_array) > 0){ 
      foreach($override_array as $override){ 
       if($row['Badge'] == $override['Badge']){ 

        $row = $this->array_push_assoc($row, 'Override', $override['Override']); 
        unset($override_array[$counter]); 
        $counter++; 
       } 


      } 
     } 
     else $row=$this->array_push_assoc($row, 'Override', '0'); 

     $result_array[]=$row; 

    } 
    $roww = array(); 
    //print_r($override_array); 
    if(count($override_array) > 0){ 
     foreach ($override_array as $override){ 
      $roww = $this->array_push_assoc($roww, 'Override', $override['Override']); 
      $roww = $this->array_push_assoc($roww, 'badge', $override['Badge']); 
      $roww = $this->array_push_assoc($roww, 'Correct', '0'); 
      $roww = $this->array_push_assoc($roww, 'Denied', '0'); 
      $result_array[]=$roww; 
     } 
    } 

ответ

1

Если я undestood Вы правы, Вы можете использовать $result = array_replace_recursive($rows, $overrides); в этом случае.

Он рекурсивно объединяет не дублированные «ключевые пути» и заменяет значения дублированных.

Как в примере в справочнике php [1].

[1] http://www.php.net/manual/en/function.array-replace-recursive.php

+0

это работает, но это не дало бы мне массив, когда знак существует в переопределяет бит не в строках. в этом случае оба правильных и отрицаемых должны стать 0 – RazorHead

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