PHP 替换数组值

标签 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 中的 Char 名称。我如何将 $arr1['name'] key=>value 合并或添加到 $arr2 中,其中 $arr1['id']等于 $arr2['char_id'] 因为每个数组的“id”字段是相同的数字。

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

感谢任何帮助或建议!

最佳答案

实际上,这很简单。 (我不认为有一个内置函数可以做到这一点。)

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

        )
)

关于PHP 替换数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24516919/

相关文章:

java - 从文本文件读取以填充二维数组(在java中)

php - 如何将一个id与多个逗号分隔的id相匹配

php - 使用 fsockopen 通过 TLS 而不是 SSL 的 PayPal ipn 处理程序

php - DOMDocument->saveHTML() 转换为空格

java - 如何创建一个新数组并将另一个数组中的所有正元素复制到新数组中并返回它?

将 void* 转换为二维数组

php - 如何自动删除 Drupal 7.x 中的旧 Feed 项目?

java - 为什么在发送之前将 String 转换为字节数组?

arrays - 如何消除使用指针的二维数组声明中的错误?

java - 2D ArrayList 索引越界