在MySQL中迭代行结果在PHP中生成数组以存储为新的嵌套数组

时间:2017-11-18 20:45:17

标签: php mysql arrays multidimensional-array foreach

我必须先说我在这里对PHP很新。我正慢慢地通过RTFM了解函数......我正在使用MYSQLi的程序式PHP,因为我目前正在与PDO斗争。

下面的问题我已经被困住了一段时间&我担心,如果我不断改变和修改,我会深入挖掘一个洞,而不是把它放在那里寻求一些有希望的帮助。

我在MySQL数据库中有来自EPOS系统的数据。我已经通过PHP中的foreach循环内的许多Curl处理程序填充了这些数据,因为EPOS系统API需要对每个数据块进行不同的调用,例如:交易标题,交易项目,投标,客户等......

现在我有了这些数据,我需要收集父项:多维数组中的子元素&最终,一旦我将这些数组更正,就将数据输出到管道分隔文件,以便导入第三方系统。我打算运行这个PHP文件,通过Windows计划任务以配置的频率轮询数据库,我已经在生产环境中成功运行了几个其他进程。

我希望我能够以与我用来获取它的过程类似的方式处理这些数据,并在PHP中使用嵌套的foreach循环来填充我可以输出到文件的数组。

我可以使用事务ID来填充第一个数组,以创建获取父记录的主键,但我似乎在foreach循环中为子查询的意外结果而苦苦挣扎。

我似乎在创建12个空数组作为子查询使用下面的&我不确定如何将子元素作为多维数组添加到这些父数组中?

我目前的代码如下:

<?php
//Error Reporting in Browser - DEV ONLY.
error_reporting(E_ALL); ini_set('display_errors', 1);

//get config & includes
include 'config.php';
include 'functions.php';

//Set runtime var of script
$rt = date('Y-m-d H:i:s');

// connect to the mysql database
$link = $con;
mysqli_set_charset($link,'utf8');

$sql = "SELECT DISTINCT TransactionId FROM epos_transactions WHERE Processed = 0";

$tranresult = mysqli_query($link, $sql);

if (mysqli_affected_rows($link) >= "0") {
http_response_code(200);    
}
elseif (mysqli_affected_rows($link) == "-1") {
$err = mysqli_errno($link) . " : " . mysqli_error($link);
exceptions_logger($err);
}

$transac = $tranresult->fetch_all(MYSQLI_ASSOC);

//Loop each transactionID & Produce TH Records.
foreach($transac as $row)
{   
$TransactionId = $row['TransactionId'];

unset($sql);
$sql =  "SELECT * FROM EPOS.TH where Trans_ID = $TransactionId";

        $resulth = mysqli_query($link, $sql);

        if (mysqli_affected_rows($link) >= "0") {
        http_response_code(200);    
        }
        elseif (mysqli_affected_rows($link) == "-1") {
        $err = mysqli_errno($link) . " : " . mysqli_error($link);
        exceptions_logger($err);
        }

        $throw = $resulth->fetch_all(MYSQLI_ASSOC);
}       
var_dump($throw); //Only returning one result instead of 12 outside of loop?
?>

上面的代码是选择符合出口条件的交易ID。然后尝试选择数组的父行的数据,然后我将需要为每个父行选择子元素并将它们存储在一个数组中,最终可以输出到一个文件,每个事务列出它的父级和放大器;儿童用品。

我将在稍后讨论的文件输出过程,但我真的希望有一些关于循环过程的提示,以帮助最初获取数据集。

提前致谢。

1 个答案:

答案 0 :(得分:0)

通过对此进行的进一步研究解决了这个问题。最初需要将数组设置在foreach循环之外,然后允许在填充后在循环外部读取结果。