1

我有一个来自遵循以下格式的 SQL 查询的数组:

[ 
  ["2012-10-01", 1, 3890], 
  ["2012-10-01", 0, 8900], 
  ["2012-09-21", 0, 8900], 
  ["2012-09-21", 1, 8900], 
  ...
]

最后,我想要计算 0 和 1。因此,例如,对于日期 2012-10-01,我会认为值 1 的计数为 3890,值 0 的计数为 8900。我想知道如何迭代该数组以构建最终数组像这样:

$final_array["value0"]["2012-10-01"] = 3890
$final_array["value1"]["2012-10-01"] = 8900
$final_array["total"]["2012-10-01"] = 12790

考虑到日期可能没有值 0 或 1 的计数,并且值 0 和 1 的顺序并不总是相同的。

所以第一个例子可能是这样的:

[ 
   ["2012-10-01", 1, 3890], 
   ["2012-09-21", 1, 8900], 
   ["2012-09-21", 0, 8900], 
   ...
]

如您所见,第一个日期缺少值 0,最终数组仍然必须像这样:

   $final_array["value0"]["2012-10-01"] = 3890
   $final_array["value1"]["2012-10-01"] = 0
4

3 回答 3

2
foreach ($array1 as $value){
    $final_array["value".$value[1]][$value[0]] = $value[2];
}

作为你的$array1第一个数组

于 2012-10-23T07:27:23.700 回答
1

这是代码。你真的应该先尝试自己解决,因为这是基本的数组映射。

foreach($initialarray as $data){
    $finalarray["value".$data[1]][$data[0]]=$data[2]; 
}

编辑:这是满足您更新要求的代码:

$initialarray = array(array("2012-10-01", 1, 3890), array("2012-09-21", 1, 8900), array("2012-09-21", 0, 8900));
$finalarray["value0"]=array();
$finalarray["value1"]=array();
foreach($initialarray as $data){
    $finalarray["value".$data[1]][$data[0]]=$data[2]; 
    $finalarray["value".round(cos($data[1]*pi()/2))][$data[0]]=$finalarray["value".round(cos($data[1]*pi()/2))][$data[0]]?$finalarray["value".round(cos($data[1]*pi()/2))][$data[0]]:0;
}
echo "<pre>";
var_dump($finalarray);
echo "<pre>";

演示

于 2012-10-23T07:28:46.513 回答
0

这将起作用:

$result = array('value0' => array(), 'value1' => array());
foreach ($array as $value) {
    $result[('value' . $value[1])][$value[0]] = $value[2];
}
于 2012-10-23T07:27:16.197 回答