PHP:从多个来源填充数组

时间:2012-05-19 20:35:45

标签: php database arrays

我需要创建一个数组,其中前两列是从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;
}

3 个答案:

答案 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'];