1

最初の2列がMySQLDBから入力され、他の1440列がゼロで入力される配列を作成する必要があります。私のコードを見てください。

最初の2つの列は正しく入力されますが、zeros(0,1440)はArray[0]になります。結果として、列の数は1442ではなく3(Array [3])になります。

どうしたの?

$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 の列を作成してから、最初の 2 つの列にデータを入れてみませんか? このコードでは、独自の関数をローリングしてゼロの配列を生成する必要はありません。組み込み関数を使用して作業を行います。

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