1

我需要创建一个数组,其中前两列从 MySQL DB 填充,而其他 1440 列用零填充。请看我的代码。

前两列正确填充,而 zeros(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;
}
4

3 回答 3

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;
}
于 2012-05-19T20:44:20.570 回答
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;

?

于 2012-05-19T20:44:59.767 回答
0

为什么不创建全为 0 的列,然后将数据放在前两个中?此代码不需要滚动您自己的函数来生成一个零数组,它使用内置函数来完成这项工作。

$resAlloc[$i] = array_fill(0,1442,0);
$resAlloc[$i][0] = $row['resID'];
$resAlloc[$i][1] = $row['resTitle'];
于 2012-05-19T20:53:47.957 回答