【问题标题】:Creating an array from other arrays从其他数组创建数组
【发布时间】:2017-05-30 20:52:21
【问题描述】:

我在两个不同的查询中从表中提取数据,并尝试比较两个结果中的日期字段。当日期相等时,我想将每个查询的两个期末余额加在一起,并将结果放入一个新数组中。我遇到的问题是on line 59,我得到的错误是 Notice: Undefined offset.

这就是我所拥有的:

 include "../sqlConnect.php";

 mysqli_set_charset($dbScrap, 'utf8');
 $dataArray[] = array();
$dateArray[] = array();
$balanceArray[] = array();

//Smaller
$query = "SELECT Account, Date ,SUM(EndingBalance) AS 'Month_Total' FROM gl_period_posting_history
    INNER JOIN gl_account
      ON gl_period_posting_history.AccountKey = gl_account.AccountKey
  Where gl_account.Account= '5010-15-0000' AND  FiscalYear > 2012
  GROUP BY Account, Date";

$result = mysqli_query( $dbScrap, $query) or die("SQL Error 1: " . 
mysqli_error($dbScrap));
while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)){

$EndingBalance15 = $row['Month_Total'];
$Date15 = $row['Date'];

$dateArray[] = array(
    'Date' => $Date15
);

$balanceArray[] = array(
    'EndingBalance' => $EndingBalance15
);


}


\\Bigger
    $query1 = "SELECT Account, Date ,SUM(EndingBalance) AS 'Month_Total' FROM gl_period_posting_history
    INNER JOIN gl_account
      ON gl_period_posting_history.AccountKey = gl_account.AccountKey
  Where gl_account.Account ='5010-08-0000' AND  FiscalYear > 2012
  GROUP BY Account, Date";

 $result = mysqli_query( $dbScrap,$query1) or die("SQL Error 1: " . mysqli_error($dbScrap));
 while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)){

$Date08 = $row['Date'];
$EndingBalance08 = $row['Month_Total'];

for($i = 0; $i < $dateArray; $i++){
        if($Date08 == $dateArray[$i]) {
            $message = "Date Equal";
            $EndingBalance = $EndingBalance08 + $balanceArray[$i];
            $Date = $Date08;
        }else{
            $message = "Date Not Equal";
            $Date = $Date08;
            $EndingBalance = $EndingBalance08;
        }
    }
    $dataArray[] = array(

        'EndingBalance' => $EndingBalance,
        'Date' => $Date,
        'Message' => $message
    );
 }
 echo "<pre>";
 print_r($dataArray);
 //echo json_encode($dataArray);
 echo "</pre>";

 $result->close();
 /* close connection */
 $dbScrap->close();

感谢您的帮助。

【问题讨论】:

  • 你的第 59 行是什么?
  • 您正在尝试循环遍历$dateArray,但在循环结束时您附加了另一个元素。这意味着循环永远不会退出。
  • @swapgs if($Date08 == $dateArray[$i]) 是第 59 行
  • $Date08 是一个字符串,$dateArray[$i] 是一个数组。他们永远不会平等。
  • 看起来您不应该在第一个 while 循环中附加数组。只需使用$dateArray[] = $Date15;$balanceArray[] = $EndingBalance15;

标签: php arrays mysqli


【解决方案1】:

问题出在for循环中,更正:

for ($i = 0; $i < count($dateArray); $i++){

【讨论】:

  • 谢谢!这行得通,但期末余额没有加在一起
  • 这只是解决了一个特定的错误。还有其他问题。
  • if($Date08 == $dateArray[$i]) 应该是 if($Date08 == $dateArray[$i]['Date'])
  • @T.AKROUT 我收到以下错误'非法字符串偏移'日期''
  • 您有错误,因为您删除了 $dateArray[] = array( 'Date' => $Date15 );并且您将其替换为 $dateArray[] = $Date15,现在您无需更改任何内容
【解决方案2】:

在您从第一个查询中获取结果的循环中,使用每一行的日期作为 $balanceArray 中的键,如下所示:

while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)) {
    $EndingBalance15 = $row['Month_Total'];
    $Date15 = $row['Date'];

    $balanceArray[$Date15] = $EndingBalance15;
}

然后在从第二个查询获取结果的循环中,您可以使用isset 检查该日期是否存在于第一个查询的结果中,如下所示。

while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)) {

    $Date08 = $row['Date'];
    $EndingBalance08 = $row['Month_Total'];

    if (isset($balanceArray[$Date08])) {
        $message = "Date Equal";
        $EndingBalance = $EndingBalance08 + $balanceArray[$Date08];
    } else {
        $message = "Date Not Equal";
        $EndingBalance = $EndingBalance08;
    }
    $dataArray[] = array(
        'EndingBalance' => $EndingBalance,
        'Date' => $Date08,
        'Message' => $message
    );
}

【讨论】:

    猜你喜欢
    • 2012-10-08
    • 2017-10-13
    • 2016-11-05
    • 2021-04-28
    • 2023-01-17
    • 2015-08-11
    • 2014-01-10
    • 1970-01-01
    • 2016-06-09
    相关资源
    最近更新 更多