2017-02-11 3 views
-1

У меня есть функция, которая я получил от стека-перелива: -Присвоить ключ к массиву значений

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)); 

вот результат я получаю:

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

, потому что 37 во втором массиве отличается чем 21 в первом массиве ... и 57 отличается от 43.

мой вопрос: Как я могу добавить ключ к значениям? Например, я хочу это:

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

Практически тот же вопрос был задан вчера: http://stackoverflow.com/q/42166487/3933332 – Rizier123

ответ

1

Вы можете сделать это, как показано ниже: -

<?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)); 

Выход: - https://eval.in/735195

+1

, что работал, ТНХ! – pixie123

+0

@ pixie123 рад помочь вам. :) :) :) –

0

Короткий и оптимизированная решение с использованием array_intersect_key и array_diff функции:

$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); 

Выход:

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