【问题标题】:remapping and grouping repeated values from an array in php在php中重新映射和分组数组中的重复值
【发布时间】:2020-09-16 19:45:50
【问题描述】:

我正在尝试将来自查询的响应重新映射到数据库,并将类似的项目分组到一个数组中。例如,从下面的这个例子中。

回复:

[
    "Location"=> "City 1",
    "AptDate"=> "2020-09-16",
    "AptTime"=> "11:00",
    "AptLength"=> "45",
    "AptStatus"=> "1",
    "Operatory"=> "1 RECALL",
    "OperatoryNum"=> "2"
],    
[
    "Location"=> "City 2",
    "AptDate"=> "2020-09-16",
    "AptTime"=> "09:00",
    "AptLength"=> "45",
    "AptStatus"=> "1",
    "Operatory"=> "1 RECALL",
    "OperatoryNum"=> "2"
],
[
    "Location"=> "City 1",
    "AptDate"=> "2020-09-16",
    "AptTime"=> "12:00",
    "AptLength"-> "45",
    "AptStatus"=>"1",
    "Operatory"=> "1 RECALL",
    "OperatoryNum"=> "2"
[,

遍历结果:

           $remappedData=[];
                foreach ($result as $value)
                {
                    $remappedData[] = [
                        'location' => $value['Location'],

                        // And so on
                    ];

                }

}

这并没有真正给我我需要的东西,因为我正在尝试根据位置对数组进行分组并基于该位置添加 AppDate。像这样。

    {
        "Location": "City 1",
        "AptDate": ["2020-09-16","2020-09-16"],
        "AptTime": ["11:00","12:00"],
        "AptLength": ["45","45"],
        "AptStatus": ["1","1"],
        "Operatory": ["1 RECALL","1 RECALL"],
        "OperatoryNum": ["2","2"]
    },
    {
        "Location": "City 2",
        "AptDate": ["2020-09-16"],
        "AptTime": ["09:00"],
        "AptLength":[ "45"],
        "AptStatus": ["1"],
        "Operatory": ["1 RECALL"],
        "OperatoryNum": "2"
    },

【问题讨论】:

  • 您是否注意到密钥不一样 City 1City1。其中一个之间有空间。如果这是一个错字,请告诉我们。所以我们可以看看
  • @JitendraYadav 是的,这是一个错字,对此感到抱歉。我现在已经解决了。

标签: php arrays foreach


【解决方案1】:

因此,根据您的情况,您希望对 Location 进行分组,并将所有其他属性分组,将它们保存在数组中。

foreach ($result as $value)
{
   $remappedData[$value['Location']]['location'] = $value['Location'];
   $remappedData[$value['Location']]['AptDate'][] = $value['AptDate']; // Notice we're creating an array here.
   $remappedData[$value['Location']]['AptTime'][] = $value['AptTime'];
   // so on all other attributes which needs to be grouped.
}

注意:这里我们将索引创建为Location。如果我们不希望 Location 作为键,我们希望作为数组(可能是前端)使用下面的代码。

$temp = [];
$remappedData=[];
$intCurrentIndex = -1;

foreach ($result as $value)
{
    if(isset($temp[$value['Location']])){
         $oldIndex = $temp[$value['Location']];
         $remappedData[$oldIndex]['AptDate'][] = $value['AptDate'];
         $remappedData[$oldIndex]['AptTime'][] = $value['AptTime'];
    }
    else{
          $temp[$value['Location']] = ++$intCurrentIndex;
          $remappedData[$intCurrentIndex]['location'] = $value['Location'];
          $remappedData[$intCurrentIndex]['AptDate'][] = $value['AptDate'];
          $remappedData[$intCurrentIndex]['AptTime'][] = $value['AptTime'];
    }
  
}

【讨论】:

  • 临时数组是什么?
  • 大部分也是在前端,我们不需要任何操作,我们可以for of循环。但以防万一不需要钥匙。那么数组就像["location"=>"index_in_remappedData"..],所以在循环中我们将检查是否设置了键。如果不是,我们将创建新数组,否则我们将选择键并以与我们相同的方式直接添加所有属性。
  • 不应该做的是抓住这个响应并将其显示在表格和列中。
  • 那么我认为它会起作用,但如果不起作用,我也给你那个解决方案。更新我的答案。
  • 我做了stackoverflow.com/questions/63945802/…我使用了相同的数据
猜你喜欢
  • 2018-03-14
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多