PHP - 将数组转换为数组映射

时间:2016-01-27 08:52:40

标签: php arrays dictionary

我有一个对象数组 - 一些查询的结果。

它看起来像这样:j - 从表中返回的行数

result[j]->date, result[j]->user, result[j]->count

表格的PK是日期+用户,这意味着我可以有行:

1.1.2016 user1 5
1.1.2016 user2 8
5.1.2016 user1 4

为了我的目的,我需要创建一个地图,其中包含许多元素=前一个数组中不同日期的数量,所以它看起来像这样:

map[j=dateX] -> array that consist of pairs (user+count) as many as i have that have this date.

意思是日期1.1.2016我将有2个对象 - (user1,5)和(user2,8) 并且在日期5.1.2016只有一对(用户1,4) 在PHP中是否有一些结构可以帮助我创建这个“地图”,例如在JAVA中?

2 个答案:

答案 0 :(得分:0)

为什么不创建像这样的关联数组

web

然后您可以将这些行放在另一个数组中。 我的意思是你自己的数据结构

答案 1 :(得分:0)

使用array_map。迭代object中的每个array,并将它们添加到具有相同array(日期)的新key。这会导致具有相同日期的对象位于一个array中。

$map = array(); // new mapped array
array_map(function($obj) use (&$map){
    $map[$obj->date][] = $obj;
}, $arr);

<强> TEST

$obj1 = new stdClass();
$obj1->date = '1.1.2016';
$obj1->user = 'user1';
$obj1->count = 5;

$obj2 = clone $obj1;
$obj2->user = 'user2';
$obj2->count = 8;

$obj3 = clone $obj1;
$obj3->date = '5.1.2016';
$obj3->count = 4;

$arr = array($obj1, $obj2, $obj3);

$map = array();
array_map(function($obj) use (&$map){
    $map[$obj->date][] = $obj;
}, $arr);

print_r($map);

<强>输出

Array
(
    [1.1.2016] => Array
        (
            [0] => stdClass Object
                (
                    [date] => 1.1.2016
                    [user] => user1
                    [count] => 5
                )

            [1] => stdClass Object
                (
                    [date] => 1.1.2016
                    [user] => user2
                    [count] => 8
                )

        )

    [5.1.2016] => Array
        (
            [0] => stdClass Object
                (
                    [date] => 5.1.2016
                    [user] => user1
                    [count] => 4
                )

        )

)