2014-07-01 94 views
3

我有,我有工作2个多维数组:PHP替换数组值

$arr1 = 
Array 
([type] => characters 
[version] => 5.6.7.8 
[data] => Array 
      ([Char1] => Array 
        ([id] => 1 
        [name] =>Char1 
        [title] =>Example 
        [tags] => Array 
          ([0] => DPS 
          [1] => Support)) 
      [Char2] => Array 
        ([id] => 2 
        [name] =>Char2 
        [title] =>Example 
        [tags] => Array 
          ([0] => Tank 
          [1] => N/A) 
        ) 
      ) 

等等

$arr2= 
Array 
([games] => Array 
     ([gameId] => 123 
      [gameType => Match 
      [char_id] => 1 
      [stats] => Array 
        ([damage] => 55555 
        [kills] => 5) 
     ) 
     ([gameId] => 157 
      [gameType => Match 
      [char_id] => 2 
      [stats] => Array 
        ([damage] => 12642 
        [kills] => 9) 
     ) 

等等

基本上,我需要的几乎所有$arr2中的数据...但只有来自$arr1的Char名称。我怎样才能合并或将$arr1['name'] key=>value合并到$arr2中,其中$arr1['id']等于$arr2['char_id'],因为每个数组的“id”字段是相同的数字。

我试过使用array_mergearray_replace,但我还没有拿出任何工作解决方案。这也是我从第三方接收的所有数据,所以我无法控制初始阵列设置。

感谢您的任何帮助或建议!

+0

只需使用一个'foreach'遍历'$ arr2' ,并且为每个元素遍历'$ arr1'来获取你想要的元素。 –

回答

1

其实这很直截了当。 (我不认为有内置功能可以做到这一点。)

回路$arr2及其下的回路也$arr1。 while循环中,只需添加一个条件,如果两个ID匹配,则将该特定名称添加到$arr2。 (和使用上$arr2一些参考&

考虑这个例子:

// your data 
$arr1 = array(
    'type' => 'characters', 
    'version' => '5.6.7.8', 
    'data' => array(
     'Char1' => array(
      'id' => 1, 
      'name' => 'Char1', 
      'title' => 'Example', 
      'tags' => array('DPS', 'Support'), 
     ), 
     'Char2' => array(
      'id' => 2, 
      'name' => 'Char2', 
      'title' => 'Example', 
      'tags' => array('Tank', 'N/A'), 
     ), 

    ), 
); 

$arr2 = array(
    'games' => array(
     array(
      'gameId' => 123, 
      'gameType' => 'Match', 
      'char_id' => 1, 
      'stats' => array('damage' => 55555, 'kills' => 5), 
     ), 
     array(
      'gameId' => 157, 
      'gameType' => 'Match', 
      'char_id' => 2, 
      'stats' => array('damage' => 12642, 'kills' => 9), 
     ), 
    ), 
); 

foreach($arr2['games'] as &$value) { 
    $arr2_char_id = $value['char_id']; 
    // loop and check against the $arr1 
    foreach($arr1['data'] as $element) { 
     if($arr2_char_id == $element['id']) { 
      $value['name'] = $element['name']; 
     } 
    } 
} 

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

$arr2现在应该是这样的:

Array 
(
    [games] => Array 
     (
      [0] => Array 
       (
        [gameId] => 123 
        [gameType] => Match 
        [char_id] => 1 
        [stats] => Array 
         (
          [damage] => 55555 
          [kills] => 5 
         ) 

        [name] => Char1 // <-- name 
       ) 

      [1] => Array 
       (
        [gameId] => 157 
        [gameType] => Match 
        [char_id] => 2 
        [stats] => Array 
         (
          [damage] => 12642 
          [kills] => 9 
         ) 

        [name] => Char2 // <-- name 
       ) 

     ) 
) 
+0

这正是我想要做的。我是编程新手,发现将我的头围绕嵌套循环,特别是foreach循环,有点困难。谢谢! – user3642863

0

遍历$arr2和将数据从匹配$arr1数组值添加到它:

$i = 0; 
foreach($arr2['games'] as $arr2Game){ 
     $id = $arr2Game['char_id']; 
     $arr2['games'][$i]['name'] = $arr1['data'][$id]['name']; 
     $i++; 
} 

没有测试此代码。

0

如果我正确地理解了你,你想为$arr2['games']数组中的每个数组添加一个name索引。

foreach($arr2['games'] as $key => $innerArray) 
{ 
    $arr2['games'][$key]['name'] = $arr1['data']['Char'.$innerArray['char_id']]['name']; 
}