2017-06-02 152 views
1

这里是我的两个数组 用户阵列合并两个数组并返回一个结果

$users = [ 
[ 
    'name' => 'Bikash', 
    'city_id' => 1 
], 
[ 
    'name' => 'Riaz', 
    'city_id' => 3 
], 
[ 
    'name' => 'Sayantan', 
    'city_id' => 2 
], 
[ 
    'name' => 'Subha', 
    'city_id' => 1 
], 
[ 
    'name' => 'Amit', 
    'city_id' => 2 
] 
]; 

城市阵列

$cities = [ 
[ 
    'id' => 1, 
    'name' => 'Kolkata' 
], 
[ 
    'id' => 2, 
    'name' => 'Bangalore' 
], 
[ 
    'id' => 3, 
    'name' => 'Mumbai' 
], 
]; 

我想city_id与用户阵列城市名来代替。

样本输出

$users = [ 
[ 
'name' => 'Bikash', 
'city' => 'Kolkata' 
], 
[ 
'name' => 'Riaz', 
'city' => 'Mumbai' 
], 
[ 
'name' => 'Sayantan', 
'city_id' => 'Bangalore' 
], 
[ 
'name' => 'Subha', 
'city' => 'Kolkata' 
], 
[ 
'name' => 'Amit', 
'city' => 'Bangalore' 
] 
]; 

这是我迄今

$userNew = []; 

foreach ($users as $user): 
    $userNew[$user['name']] = $cities[0]['name']; 
endforeach; 

echo '<pre>'; 
print_r($userNew); 

我找不到这个特定问题的任何解决方案的尝试。

回答

2

将溶液使用array_columnarray_walk功能:

$city_names = array_column($cities, 'name', 'id'); 
array_walk($users, function(&$v, $k) use($city_names){ 
    if (isset($city_names[$v['city_id']])) { 
     $v['city_id'] = $city_names[$v['city_id']]; 
    } 
}); 

print_r($users); 

输出:

Array 
(
    [0] => Array 
     (
      [name] => Bikash 
      [city_id] => Kolkata 
     ) 

    [1] => Array 
     (
      [name] => Riaz 
      [city_id] => Mumbai 
     ) 

    [2] => Array 
     (
      [name] => Sayantan 
      [city_id] => Bangalore 
     ) 

    [3] => Array 
     (
      [name] => Subha 
      [city_id] => Kolkata 
     ) 

    [4] => Array 
     (
      [name] => Amit 
      [city_id] => Bangalore 
     ) 
) 
3

您可以制作一个城市ID和城市名称对的数组。 Live demo here

$map = array_combine(array_column($cities, 'id'), array_column($cities, 'name')); 
foreach($users as &$v) 
{ 
    $v['city_id'] = $map[$v['city_id']]; 
} 

更清晰的方式来计算$mapanswer of RomanPerekhrest

$map = array_column($cities, 'name', 'id');

0
<?php 
    $newCities=array(); 
    //resort cities, so we can get the values directly 
    foreach($cities as $key => $value) 
    { 
     $newCities[$key]=$value; 
    } 
    $newUser=array(); 
    //now we can go over user 
    foreach($user as $key => $value) 
    { 
    $newData['name']=$value['name']; 
    $newData['city']=$newCities[$value['city_id']]; 
    $newUser[$key]=$newData; 
    } 
0

你可以使用嵌套循环来做到这一点,但它会是一个漫长的过程。

一个更好的办法来做到这一点是:

$newCitties = []; 
foreach($cities as $city){ 
    $newCitties[$city['id']] = $city['name']; 
} 

foreach($users as $user){ 
    $user['city'] = $newCitties[$user['city_id']]; 
    unset($user['city_id']); 
} 
0

请试试这个

$newuser = ""; 
function getCityname($cities,$cityid){ 

    foreach($cities as $city){ 
     if($city['id'] == $cityid) return $city['name']; 
    } 
} 

foreach($users as $user){ 
    $cityname = getCityname($cities,$user['city_id']); 
    $newuser[] = array('name' => $user['name'] , 'city' => $cityname); 
} 

print_r($newuser); 
0
$_cities = array_combine(array_column($cities, 'id'), array_column($cities, 'name')); 

$userNew = []; 

foreach ($users as $user): 
    $userNew[] = ['name' => $user['name'], 'city' => $_cities[$user['city_id']]]; 
endforeach; 
+1

感谢您对这个代码片段,它可以提供即时帮助。通过展示*为什么*这是一个很好的解决方案,对未来的读者会有更好的解决方案,这将为它的教育价值提供一个合适的解释[//大大提高](// meta.stackexchange.com/q/114762)但不完全相同的问题。请编辑您的答案以添加解释,并指出适用的限制和假设。 –