2017-02-11 1 views
-1

i eine Funktion hat, die ich vom Stack-Überlauf bekam: -Taste mit Array-Werten

function testFunction($a, $b) { 
    $map = array(); 
    foreach($a as $name => $value){ 
     if(!isset($b[$name]) || $b[$name] != $value) { 
      $map[$value] = 1; 
     } 
    } 
    return array_keys($map); 
} 

$array1 = array("Peter"=>"35", "Ben"=>"21", "Joe"=>"43"); 
$array2 = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"57"); 

print_r(testFunction($array2, $array1)); 

hier ist das Ergebnis i erhalten:

Array ([0] => 37 [1] => 57) 

, weil die 37 in der zweiten Reihe ist anders als 21 in der ersten Reihe ... und die 57 ist anders als die 43.

meine Frage ist: Wie kann ich einen Schlüssel zu den Werten hinzufügen? dies zum Beispiel, ich will:

Array ("Ben"=>"37", "Joe"=>"57"); 
+0

So ziemlich die gleiche Frage wurde gestern gefragt: http://stackoverflow.com/q/42166487/3933332 – Rizier123

Antwort

1

Sie können es wie folgt: -

<?php 

function testFunction($a, $b) { 
    $map = array(); 
    foreach($a as $name => $value){ 
     if(!isset($b[$name]) || $b[$name] != $value) { 
      $map[$name] = $value; // make key value array 
     } 
    } 
    return $map; 
} 

$array1 = array("Peter"=>"35", "Ben"=>"21", "Joe"=>"43"); 
$array2 = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"57"); 

print_r(testFunction($array2, $array1)); 

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

+1

das funktioniert, thx! – pixie123

+0

@ pixie123 froh, Ihnen zu helfen. :) :) :) –

0

Kurz und optimierte Lösung mit array_intersect_key und array_diff Funktionen:

$array1 = ["Peter"=>"35", "Ben"=>"21", "Joe"=>"43"]; 
$array2 = ["Peter"=>"35", "Ben"=>"37", "Joe"=>"57", 'I'=>0]; 

// getting all $array2 items with coincident keys 
$common_key_items = array_intersect_key($array2, $array1); 

// getting value difference between arrays with same keys 
$result = array_diff($common_key_items, $array1); 

print_r($result); 

Der Ausgang:

Array 
(
    [Ben] => 37 
    [Joe] => 57 
)