我需要创建一个数组,其中前两列是从MySQL DB填充的,而其他1440列是用零填充的。请看我的代码。
前两列正确填充,而零(0,1440)导致Array [0]。结果列数为3(Array [3])而不是1442。
它出了什么问题?
$query2="SELECT resID, resTitle FROM my_db.resources;";
$result2=DatabaseConnector::ExecuteQueryArray($query2);
$i=0;
$resAlloc = array();
foreach ($result2 as $row):
$resAlloc[$i] = array($row['resID'],$row['resTitle'],zeros(0,1440));
$i++;
endforeach;
// Generate an array of zeros
function zeros($rowCount, $colCount){
$matrix = array();
for ($rowIndx=0; $rowIndx<$rowCount; $rowIndx++){
$matrix[] = array();
for($colIndx=0; $colIndx<$colCount; $colIndx++){
$matrix[$rowIndx][$colIndx]=0;
}
var_dump(memory_get_usage());
}
return $matrix;
}
答案 0 :(得分:1)
鉴于上述评论,
$resAlloc[$i] = array($row['resID'],$row['resTitle'],zeros(0,1440));
永远不会奏效。你要创建的是一个包含3个元素的数组。此代码相当于:
$resAlloc[$i] = array(
0 => $row['resID'],
1 => $row['resTitle'],
2 => array(...) // array returned from the zeros() function
);
它不是1440元素数组,它将是一个3元素数组。
要使此代码按您的意愿工作,您必须执行更多类似的操作:
$resAlloc[$i] = array(0 => $row['resID'], 1 => $row['resTitle']);
for($j = 2; $j < 1442; $j++) {
$resAlloc[$i][$j] = 0;
}
答案 1 :(得分:1)
怎么样:
$query2="SELECT resID, resTitle FROM my_db.resources;";
$result2=DatabaseConnector::ExecuteQueryArray($query2);
$i=0;
$resAlloc = array();
foreach ($result2 as $row):
$resAlloc[$i][] = $row['resID'];
$resAlloc[$i][] = $row['resTitle']
for ($j=0; $j<1440; $j++)
{
$resAlloc[$i][] = 0;
}
$i++;
endforeach;
答案 2 :(得分:0)
为什么不创建全0的列,然后将数据放在前两个?此代码不需要滚动自己的函数来生成零数组,它使用内置函数来完成工作。
$resAlloc[$i] = array_fill(0,1442,0);
$resAlloc[$i][0] = $row['resID'];
$resAlloc[$i][1] = $row['resTitle'];