我正在使用 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_merge
和 array_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/