【问题标题】:Loop through 2 arrays containing array and array of objects - Php循环遍历包含对象数组和数组的 2 个数组 - Php
【发布时间】: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;

【问题讨论】:

    标签: php arrays json foreach


    【解决方案1】:

    使用 array_chunk 将数组拆分为一组,每组 3 个对象

    $ArrayObj = json_decode($ArrayObj, true);
    
    $temp = array_chunk($ArrayObj, 3);
    $res = [];
    foreach (array_chunk($ArrayObj, 2) as $items) {
       $temp = [];
       foreach($items as $x) {
         $temp[$x["attr1"]] = $x["attr2"];
       }
       $res [] = $temp;  
    }
    print_r(json_encode($res));
    

    demo

    【讨论】:

      猜你喜欢
      • 2019-10-13
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 2014-06-18
      • 2019-07-10
      • 1970-01-01
      相关资源
      最近更新 更多