2012-05-19 121 views
1

我需要創建一個數組,其中前兩列是從MySQL DB填充的,而其他1440列填充了零。請參閱我的代碼。PHP:從多個來源填充數組

前兩列填充正確,零(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; 
} 
+2

1440列?呃...哎?而這是如何不**工作?我們不會爲你猜測。 –

+0

前兩列填滿,零(0,1440)結果爲數組[0]。結果列數爲3(數組[3]),而不是1442. –

+0

當您有** 1440 **列,***全部填充0時,您知道是時候重構數據庫了。 –

回答

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; 

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; 
} 
0

爲什麼不創建所有0的列,然後把數據放在前兩個?此代碼不需要滾動自己的函數來生成一個零數組,它使用內置函數來完成這項工作。

$resAlloc[$i] = array_fill(0,1442,0); 
$resAlloc[$i][0] = $row['resID']; 
$resAlloc[$i][1] = $row['resTitle'];