PHP如何重构数组?
我有一个数组,我想重组。我想按顺序将项目分组。我可以找出如何使用foreach$arr['history']作为$obj从数组中提取数据。我的问题是使用循环填充新数组 现在看起来是这样的:PHP如何重构数组?,php,arrays,Php,Arrays,我有一个数组,我想重组。我想按顺序将项目分组。我可以找出如何使用foreach$arr['history']作为$obj从数组中提取数据。我的问题是使用循环填充新数组 现在看起来是这样的: Array ( [history] => Array ( [id] => 23452435 [legend] => Array ( [0] => Array ( [player] => me
Array (
[history] => Array (
[id] => 23452435
[legend] => Array (
[0] => Array (
[player] => me
[turn] => 1
[card] => Array (
[name] => foo
)
)
[1] => Array (
[player] => me
[turn] => 1
[card] => Array (
[name] => bar
)
)
[2] => Array (
[player] => opponent
[turn] => 1
[card] => Array (
[name] => derp
)
)
[3] => Array (
[player] => opponent
[turn] => 2
[card] => Array (
[name] => hoo
)
)
)
))
我希望它看起来像下面这样,但我不知道如何自动创建和填充此结构。这是一个每回合都有一个子阵的阵法,包含我和对手的阵法
Array (
[0] => Array (
[me] => Array (
[0] => foo
[1] => bar
)
[opponent] = Array (
[0] => derp
)
)
[1] => Array (
[me] => Array ()
[opponent] => Array (
[0] => hoo
)
))
谢谢
编辑:
这就是我需要的。谢谢你的回答
$result = [];
foreach ($arr['history'] as $historyItem) {
foreach ($historyItem['legend'] as $list) {
$result[$list['turn']][$list['player']][] = $list['card']['name'];
}
}
您可以开始向新阵列添加数据。PHP非常宽容
$historyByTurns = array();
foreach ($arr['history'] as $historyItem) {
foreach ($historyItem['legend'] as $legendItem) {
$turn = $legendItem['turn'];
$player = $legendItem['player'];
if (!array_key_exists($turn, $historyByTurns)) {
$historyByTurns[$turn] = array();
}
if (!array_key_exists($player, $historyByTurns[$turn])) {
$historyByTurns[$turn][$player] = array();
}
foreach ($legendItem as $card) {
$historyByTurns[$turn][$player][] = $card['name'];
}
}
}
您必须对其进行测试,因为我没有办法进行ATM。您可以开始向新阵列添加数据。PHP非常宽容
$historyByTurns = array();
foreach ($arr['history'] as $historyItem) {
foreach ($historyItem['legend'] as $legendItem) {
$turn = $legendItem['turn'];
$player = $legendItem['player'];
if (!array_key_exists($turn, $historyByTurns)) {
$historyByTurns[$turn] = array();
}
if (!array_key_exists($player, $historyByTurns[$turn])) {
$historyByTurns[$turn][$player] = array();
}
foreach ($legendItem as $card) {
$historyByTurns[$turn][$player][] = $card['name'];
}
}
}
您必须测试它,因为我没有办法使用自动取款机。试试这个:
$result = [];
foreach ($data['history']['legend'] as $list) {
$result[$list['turn']-1][$list['player']][] = $list['card']['name'];
}
摆弄它 试试这个:
$result = [];
foreach ($data['history']['legend'] as $list) {
$result[$list['turn']-1][$list['player']][] = $list['card']['name'];
}
摆弄它 这就是我需要的。经过一些调整,我使它适用于我的数据集。谢谢:由于某种原因,我不得不将foreach循环分成两个,每个键一个。很好的方法。我在读你的答案之前写的一行代码是这样的:array_mapfunction$ause&$result{$result[$a[turn]-1][$a[player]][=$a[card][name];},$data[history][legend];伟大的思想在智力上会聚!这就是我需要的。经过一些调整,我使它适用于我的数据集。谢谢:由于某种原因,我不得不将foreach循环分成两个,每个键一个。很好的方法。我在读你的答案之前写的一行代码是这样的:array_mapfunction$ause&$result{$result[$a[turn]-1][$a[player]][=$a[card][name];},$data[history][legend];伟大的思想在智力上会聚!这个答案提供了与另一个答案相同的结果,但两者都不是我所需要的100%,而是帮助我理解了我的问题。尽管做了一些调整,这项工作还是成功了。谢谢:这个答案提供了与另一个答案相同的结果,但这两个答案都不是我所需要的100%,而是帮助我理解了我的问题。尽管做了一些调整,这项工作还是成功了。谢谢: