PHP替换数组值

时间:2014-07-01 18:21:55

标签: php arrays multidimensional-array key-value

我正在使用2个多维数组:

$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中的字符名称。我如何将$arr1['name'] key=>value合并或添加到$arr2 $arr1['id']等于$arr2['char_id']作为" id"每个数组的字段都是相同的数字。

我尝试过使用array_mergearray_replace,但我还没有想出任何有效的解决方案。这也是我从第三方收到的所有数据,因此我无法控制初始阵列设置。

感谢您提供任何帮助或建议!

3 个答案:

答案 0 :(得分:1)

实际上,这是非常直截了当的。 (我不认为有内置功能可以做到这一点。)

循环$arr2并在其下循环$arr1。在循环下,只需添加一个条件,即如果两个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
                )

        )
)

答案 1 :(得分:0)

迭代$arr2并从匹配的$arr1数组值向其添加数据:

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

尚未测试此代码。

答案 2 :(得分:0)

如果我正确理解您,您希望为name数组中的每个数组添加$arr2['games']索引。

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