PHP如何重构数组?

PHP如何重构数组?,php,arrays,Php,Arrays,我有一个数组,我想重组。我想按顺序将项目分组。我可以找出如何使用foreach$arr['history']作为$obj从数组中提取数据。我的问题是使用循环填充新数组 现在看起来是这样的: Array ( [history] => Array ( [id] => 23452435 [legend] => Array ( [0] => Array ( [player] => me

我有一个数组,我想重组。我想按顺序将项目分组。我可以找出如何使用foreach$arr['history']作为$obj从数组中提取数据。我的问题是使用循环填充新数组

现在看起来是这样的:

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%,而是帮助我理解了我的问题。尽管做了一些调整,这项工作还是成功了。谢谢: