2016-10-17 2 views
0

Diese Frage klingt vielleicht albern, aber ich habe keinen guten Ansatz gefunden.PHP kombinieren zwei Arrays mit Schlüsselwerten

Ich muss mehrdimensionale Arrays wie folgt aus: -

array 
(
    [0] => Array 
     (
     [field1] => A 
     [field2] => 100 
     [field3] => 20 
    ) 

    [1] => Array 
     (
     [field1] => B 
     [field2] => 100 
     [field3] => 30 
    ) 
    [2] => Array 
     (
     [field1] => C 
     [field2] => 100 
     [field3] => 30 
    ) 
) 



array 
(
    [0] => Array 
     (
     [field1b] => A 
     [field2b] => 500 
     [field3b] => 0 
    ) 

    [1] => Array 
     (
     [field1b] => B 
     [field2b] => 300 
     [field3b] => 10 
    ) 
) 

Ich möchte beide Arrays mit field1 als Key, und im Auge, die verschmelzen, die Arrays nicht gleich groß sind.

Das Array Ergebnis sollte sein:

array 
(
    [0] => Array 
     (
     [field1] => A 
     [field2] => 100 
     [field3] => 20 
     [field2b] => 500 
     [field3b] => 0 

    ) 

    [1] => Array 
     (
     [field1] => B 
     [field2] => 100 
     [field3] => 30 
     [field2b] => 300 
     [field3b] => 10 
    ) 
    [2] => Array 
     (
     [field1] => C 
     [field2] => 100 
     [field3] => 30 
    ) 
) 

Vielen Dank im Voraus!

+0

Was haben Sie versucht? – Kristiyan

+0

Haben Sie versucht: 'array_merge_recursive'? http://php.net/manual/en/function.array-merge-recursive.php –

+0

user3472675 Sie haben die Antworten unten, überprüfen Sie sie und markieren Sie eine Antwort als akzeptiert, die Ihnen richtig erscheint. Danke –

Antwort

1
<?php 
$array1 = array 
(
    "0" => Array 
     (
     "field1" => "A", 
     "field2" => "100", 
     "field3" => "20" 
    ), 

    "1" => Array 
     (
     "field1" => "B", 
     "field2" => "100", 
     "field3" => "30" 
    ), 
    "2" => Array 
     (
     "field1" => "C", 
     "field2" => "100", 
     "field3" => "30" 
    ) 
); 

$array2 = array 
(
    "0" => Array 
     (
     "field1b" => "A", 
     "field2b" => "500", 
     "field3b" => "0" 
    ), 

    "1" => Array 
     (
     "field1b" => "B", 
     "field2b" => "300", 
     "field3b" => "10" 
    ) 
); 

$new_array1 = []; 
foreach ($array1 as $object1) { 
    $new_array1[$object1['field1']] = $object1; 
} 

$new_array2 = []; 
foreach ($array2 as $key => $object2) { 
    $new_array2[$object2['field1b']] = $object2; 
} 
$new_array = []; 
foreach($new_array1 as $key => $val) 
{ 
    $new_array[$key]['field1'] = $val['field1']; 
    $new_array[$key]['field2'] = $val['field2']; 
    $new_array[$key]['field3'] = $val['field3']; 
    if (array_key_exists($key,$new_array2))//Check if the key is exists in an array 
    { 
     $new_array[$key]['field2b'] = $new_array2[$key]['field2b']; 
     $new_array[$key]['field3b'] = $new_array2[$key]['field3b']; 
    }  
} 

print_r($new_array); 

DEMO

Sie es ausprobieren können.

+0

Einfach genial! :) Danke vielmals! Das ist genau der Ansatz, den ich brauche! – user3472675

+0

@ user3472675 so viel foreach ist nirgendwo eine brillante Idee. Einfache Sache, keine Notwendigkeit, es so komplex zu machen. Mag sein, dass es richtig beantwortet, aber definitiv nicht der netteste. –

+0

@ user3472675 auch wenn dies eine akzeptable Antwort ist, warum hast du das anfangs gesagt: - 'Diese Frage mag sich albern anhören, aber ich habe keinen guten Ansatz gefunden. –

4

die Sie interessieren,

$array1 = array 
(
    "0" => Array 
     (
     "field1" => "A", 
     "field2" => "100", 
     "field3" => "20" 
    ), 

    "1" => Array 
     (
     "field1" => "B", 
     "field2" => "100", 
     "field3" => "30" 
    ), 
    "2" => Array 
     (
     "field1" => "C", 
     "field2" => "100", 
     "field3" => "30" 
    ) 
); 



$array2 = array 
(
    "0" => Array 
     (
     "field1b" => "A", 
     "field2b" => "500", 
     "field3b" => "0" 
    ), 

    "1" => Array 
     (
     "field1b" => "B", 
     "field2b" => "300", 
     "field3b" => "10" 
    ) 
); 

foreach($array1 as $key=>$val) 
{ 
    $new_array[$key]['field1'] = $val['field1']; 
    $new_array[$key]['field2'] = $val['field2']; 
    $new_array[$key]['field3'] = $val['field3']; 
    if (array_key_exists($key,$array2))//Check if the key is exists in an array 
    { 
     $new_array[$key]['field2b'] = $array2[$key]['field2b']; 
     $new_array[$key]['field3b'] = $array2[$key]['field3b']; 
    }  
} 

echo "<pre>"; 
print_r($new_array); 
echo "</pre>"; 

DEMO

3

Ganz einfach: - foreach anwenden und tun es wie folgt: -

<?php 
$final_array = array(); 

foreach ($arr1 as $key=>$val){ 
    if(isset($arr2[$key])){ 
     $final_array[$key] = array_merge($val,$arr2[$key]); 
     unset($final_array[$key]['field1b']); 
    }else{ 
     $final_array[$key] = $val; 
    } 

} 

echo "<pre/>";print_r($final_array); 

Ausgang: - https://eval.in/661803

Wenn Ihr beide Array unterschiedliche Anzahl von Elementen ist: -

<?php 
    $count1 = count ($arr1); 
    $count2 = count ($arr2); 
    $final_array = array(); 
    if ($count1 >$count2){ 
    foreach ($arr1 as $key=>$val){ 
     if(isset($arr2[$key])){ 
      $final_array[$key] = array_merge($val,$arr2[$key]); 
      unset($final_array[$key]['field1b']); 
     }else{ 
      $final_array[$key] = $val; 
     } 
    } 
    echo "<pre/>";print_r($final_array); 
    }else if ($count2 >$count1){ 
    foreach ($arr2 as $key=>$val){ 
     if(isset($arr1[$key])){ 
      $final_array[$key] = array_merge($val,$arr1[$key]); 
      unset($final_array[$key]['field1b']); 
     }else{ 
      $final_array[$key] = $val; 
     } 
    } 
    echo "<pre/>";print_r($final_array); 
    }else{ 
    foreach ($arr1 as $key=>$val){ 
     if(isset($arr2[$key])){ 
      $final_array[$key] = array_merge($val,$arr2[$key]); 
      unset($final_array[$key]['field1b']); 
     }else{ 
      $final_array[$key] = $val; 
     } 

    } 
    echo "<pre/>";print_r($final_array); 
    } 
0

Was über diese stattdessen hartcodierte Tasten Zustand definieren? alles, was Sie brauchen, ist der Schlüssel zu schaffen, die in Kombination Array aufgenommen werden sollten nicht ..

Demo

<?php 
$A  = array(
    array(
     'field1' => 'A', 
     'field2' => '100', 
     'field3' => '20', 
    ), 
    array(
     'field1' => 'B', 
     'field2' => 100, 
     'field3' => 30, 
    ), 
    array(
     'field1' => 'C', 
     'field2' => 100, 
     'field3' => 30, 
    ) 
); 
$B  = array(
    array(
     'field1b' => 'A', 
     'field2b' => 500, 
     'field3b' => 0 
    ), 
    array(
     'field1b' => 'B', 
     'field2b' => 300, 
     'field3b' => 10 
    ) 
); 
$combined = array(); 
foreach($A as $key => $arr) { 
    $tempKey = reset($arr); 
    $second_arr = $B[ $key ]; 
    $tempKey2 = reset($B[ $key ]); 
    if($tempKey == $tempKey2) { 
     $combined[] = $arr + $second_arr; 
     unset($combined[ $key ]['field1b']); 
    } 
    else { 
     $combined[] = $arr; 
    } 
} 
echo '<pre>'; 
print_r($combined); 
echo '</pre>';