【发布时间】:2018-07-03 09:04:07
【问题描述】:
我有一个名为 ArrayObj 的数组,如下所示,
ArrayObj = [
{
"attr1" : "d1",
"attr2" : "some data for d1 key"
...
},
{
"attr1" : "d2",
"attr2" : "some data for d2 key"
...
},
.
.
. 33 objects
]
每 N 个对象后其值都相同。假设在 11 项之后。
使用上面的 ArrayObj 我创建了 Array1,如下所示:
Array1 = ["d1","d2","d3",...,"d1","d2","d3",...,"d1","d2","d3",...33 items]
因为它在每 N 个值之后都包含相同的值,所以我得到了上面的东西。
现在,我想通过 Array1 循环一次创建 Array2,其中包含 33 个项目,ArrayObj 一次循环包含 33 个对象并将它们合并但仅合并为 3 个对象。
因为 33 项(Array1:左侧键)= 33 项(ArrayObj:右侧值)记住我只需要 ArrayObj 中单个属性的值
但这里的问题或挑战是所有三个新创建的对象的键都是相同的,因此它会覆盖,我最终在一个数组中只有一个对象。
我正在寻找的内容如下:
[
{
"d1" : "some data 1",
"d2" : "some data 2",
"d3" : "some data 3",
...
...
11 objects
},
{
"d1" : "some data 1",
"d2" : "some data 2",
"d3" : "some data 3",
...
...
11 objects
},
{
"d1" : "some data 1",
"d2" : "some data 2",
"d3" : "some data 3",
...
...
11 objects
}
]
我得到的是:
[
{
"d1" : "some data 1", //The Last object only, first 2 are overwritten because of same keys
"d2" : "some data 2",
"d3" : "some data 3",
...
...
11 objects
}
]
代码
$ArrayObj (contains 33 objects with all the data)
$Array1 = array(); // 33 items
$Array2 = array(); // new array need to add 3 objects
for($j = 0; $j < $totalCount; $j++){ //33 totalCount
$Array1[$j] = $ArrayObj[$j]['left_side_data']; //getting particular attribute value and storing it as an array
}
//By now I have $Array1 with 33 items in it containing all the items which will be keys for Array2
foreach($ArrayObj as $key=>$res){
$Array2[$Array1[$key]] = $ArrayObj[$key]['data'];
}
return $Array2;
【问题讨论】: