复杂的PHP转置/透视

时间:2013-06-28 16:50:14

标签: php pivot transpose

我有以下数组:

Array
(
[0] => Array
    (
        [Name] => first_data
        [building] => A
        [apt] => 16
    )

[1] => Array
    (
        [Name] => first_data
        [building] => B
        [apt] => 16
    )
[2] => Array
    (
        [Name] => second_data
        [building] => A
        [apt] => 17
    )

[3] => Array
    (
        [Name] => second_data
        [building] => B
        [apt] => 18
    )

我需要将其作为:

返回
Array
(
[0] => Array
    (
        [Name] => first_data
        [A] => 16
        [B] => 16
    )
[1] => Array
    (
        [Name] => second_data
        [A] => 17
        [B] => 18
    )

有什么想法吗?

顺便说一句,第一个阵列有数百个条目(不仅是first_data,还有第二个等等......)加上它有超过A和B.

提前致谢。

1 个答案:

答案 0 :(得分:1)

不完全是您想要的,但如果您改为按名称索引新数组,则可以非常轻松地完成此操作。如果索引号是某种ID,您只需为其创建一个字段

foreach ( $oldarray as $index => $piece )
{
    $newarray[$piece['Name']] = array($piece['building'] => $piece['apt'])
}

这会给你

Array
(
['first_data'] => Array
    (
        ['A'] => 16,
        ['B'] => 16
    )
['second_data'] => Array
    (
        ['A'] => 17,
        ['B'] => 18
    )
)

由于你有两个具有相同new的条目,当你点击第二个循环时,它只会添加另一个建筑物名称。如果你可以使用这种布局,那么你的解决方案非常简单,它将需要更多的步骤来完成你所展示的。如果您必须按照显示的方式进行操作,则需要额外的代码来遍历新数组,找到建筑物名称,在正确的位置添加密钥,但如果您有大量数据,这将会更慢。

在我看来,我提出它的方式也是一种更容易查看数组的方法。如果你想知道“second_data”中A的apt值,你可以做到

$newarray['second_data']['A']

使用你的数组布局,它需要一个循环来搜索数组中的“second_data”,因为你不知道它在哪里。