我有一个对象数组 - 一些查询的结果。
它看起来像这样: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中?
答案 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
)
)
)