【问题标题】:Combine looping array PHP Codeigniter组合循环数组 PHP Codeigniter
【发布时间】:2017-11-15 13:24:48
【问题描述】:

我有两个数组,它们是两个不同数据库查询的结果。我想按照下面示例中解释的方式合并这两个数组

这是执行第一个查询的代码:

$query = $this->db->query("SELECT kec,pilihan,COUNT(pilihan) as total FROM votes GROUP BY pilihan");
$someArray = [];
foreach($query->result_array() as $row){
    array_push($someArray, [
        'data'     => $row['pilihan'],
        'total'    => $row['total'],
        'location' => $row['kec'],
        ]);
    }

这是结果数组:

[
  {
    "data": "1",
    "total": "2",
    "location": "3524230"
  },
  {
    "data": "2",
    "total": "3",
    "location": "3524230"
  },
  {
    "data": "3",
    "total": "1",
    "location": "3524230"
  }
]

这是执行第二个查询的代码:

$query = $this->db->query("SELECT * FROM owl_dptmaster GROUP BY kecamatan");
$someArray = [];
foreach($query->result_array() as $row){
    array_push($someArray, [
        'location' => $row['kecamatan']
    ]);
}

第二个数组看起来像这样:

[
  {
    "location": "3524230"
  },
  {
    "location": "3524240"
  },
  {
    "location": "3524250"
  },
  {
    "location": "3524260"
  }
]

我想合并这两个数组,结果就是这个数组:

[
  {
    "location": "3524230",
    "data1": "2",
    "data2": "3",
    "data3": "1"
  },
  {
    "location": "3524240",
    "data1": null,
    "data2": null,
    "data3": null
  },
  {
    "location": "3524250",
    "data1": null,
    "data2": null,
    "data3": null
  },
  {
    "location": "3524260",
    "data1": null,
    "data2": null,
    "data3": null
  }
]

我怎样才能做到这一点?

【问题讨论】:

  • I already tried with many methods but still fail 你能告诉我们你的尝试吗?如果不与我们分享您的努力,我们可能会重复您的工作,而不是提供可行的解决方案。 idownvotedbecau.se/noattempt

标签: php arrays json codeigniter


【解决方案1】:

您可以使用子查询在 sql 中进行汇总,而不是组合数组。假设您使用的是 mysql。

$query = $this->db->query(
 "select owl.kecamatan,
  (select count(pilihan) from votes where kec = owl.kecamatan and pilihan = 1) data1,
  (select count(pilihan) from votes where kec = owl.kecamatan and pilihan = 2) data2,
  (select count(pilihan) from votes where kec = owl.kecamatan and pilihan = 3) data3,
 from owl_dptmaster owl
 order by owl.kecamatan"
 );

您可以执行此查询,然后构建一个"data" . $pilihan => $totalPilihan 数组,当$location 发生变化时,您将其推入$someArray

$query = $this->db->query(
"select owl.kecamatan as location, v.pilihan
from owl_dptmaster owl
left join votes v
on owl.kecamatan = v.kec"
order by 1, 2);

您有一个包含所有位置和投票的结果集。

 // Made of query results...
 $query = [

 [ "location" => "3524230", "pilihan" => "1" ],
 [ "location" => "3524230", "pilihan" => "1" ],
 [ "location" => "3524230", "pilihan" => "2" ],
 [ "location" => "3524230", "pilihan" => "3" ],
 [ "location" => "3524230", "pilihan" => "3" ],
 [ "location" => "3524230", "pilihan" => "3" ],
 [ "location" => "3524230", "pilihan" => "4" ],
 [ "location" => "3524230", "pilihan" => "4" ],
 [ "location" => "3524230", "pilihan" => "5" ],
 [ "location" => "3524240", "pilihan" => null ],
 [ "location" => "3524250", "pilihan" => null ],
 [ "location" => "3524260", "pilihan" => null ],
 [ "location" => "3524270", "pilihan" => "1" ],
 [ "location" => "3524270", "pilihan" => "1" ],
 [ "location" => "3524270", "pilihan" => "1" ],
 [ "location" => "3524270", "pilihan" => "20" ],
 [ "location" => "3524270", "pilihan" => "20" ],
 [ "location" => "3524270", "pilihan" => "30" ]

 ];

这是构建$someArray[] 的程序例程。

 $someArray = [];
 $xRow = [];
 $oldPilihan = '';
 $total = 0;
 $oldLocation = '';

 foreach ($query as $row) {

 //echo $row['location'] . " - " . $row['pilihan'] . '<br>';

 $location = $row['location'];
 $pilihan = $row['pilihan'];

 if ($pilihan !== $oldPilihan) {

 if (! empty($oldPilihan) ) {
   $dataName = 'data' . $oldPilihan;
   $xRow[] = array($dataName => $total);
 }
   $total = 1;
   $oldPilihan = $pilihan;

 } else {

   $total++;
 }

 if ($location !== $oldLocation) {

   if (! empty($oldLocation)) {
     array_push($someArray, $xRow);
   }
   $xRow = [ 'location' => $location ];
   $oldLocation = $location;

   }

 }

 $dataName = 'data' . $oldPilihan;
 $xRow[] = array($dataName => $total);
 array_push($someArray, $xRow);

 var_dump($someArray);

【讨论】:

  • 如果 pilihan 是动态的怎么办?,因为 pilihan 是活动记录
  • 所以 pilihan 可以是 1-20 或更多,数据调整 pilihan 数
  • 你的总结会怎样? "location": "3524230", "data1": "2", "data2": null, "data3": "1""location": "3524230", "data1": "2", "data3": "1", "data20": "6"
  • 我想自动制作(select count(pilihan) from votes where kec = owl.kecamatan and pilihan = 1) data1,无需手动输入代码
  • 摘要将是"location": "3524230", "data1": "2", "data3": "1", "data20": "6"
猜你喜欢
  • 1970-01-01
  • 2011-05-18
  • 2015-04-06
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 2011-06-09
相关资源
最近更新 更多