PHP替换数组值

3

我有两个多维数组需要处理:

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

etc...

$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 name”。如何在$arr1['id']等于$arr2 ['char_id']时将$arr1 ['name'] key => value 合并或添加到 $arr2 中,因为每个数组的“id”字段是相同的数字。
我尝试使用array_mergearray_replace,但没有找到任何有效的解决方案。这也是我从第三方接收的所有数据,所以我无法控制初始数组设置。
非常感谢您的帮助或建议!

只需使用 foreach 循环遍历 $arr2,并对于每个元素,循环遍历 $arr1 以获取所需的元素。 - gen_Eric
3个回答

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
                )

        )
)

这正是我想要做的。我是编程新手,发现理解嵌套循环,特别是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'];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接