我不是php忍者,所以请耐心等待我的查询。我有以下代码(此处为简化示例格式,因为实际代码中发生了许多其他不相关的事情):

数据库连接已经成功定义并由php文件开始处的include处理。

// Define our $now value to compare times with
$now    = time();

// Define the numerical timestamps required for calculating stuff
$min1st = 5140800; //59.5 days
$max1st = 5227200; //60.5 days
$min2nd = 7732800; //89.5 days
$max2nd = 7819200; //90.5 days
$delmar = 10368000; //120 days

// Get each relevant entry from the key table
try {
    $stmt = $conn->prepare("SELECT * FROM keyTable WHERE `status` = 'neutral' ORDER BY `lastModified` ASC");
    $stmt->execute();
    $result = $stmt->fetchAll();
} catch(PDOException $e) { catchMySQLerror($e->getMessage()); }

// Set up some instance counters
$a = 0;
$b = 0;
$c = 0;

// Create some arrays to pop the data into from the next stage so we can use it again later
$arrA   = array();
$arrB   = array();
$arrC   = array();


到目前为止,一切都很好。下一部分将使用我们在顶部附近设置的一些数据来发现哪些数据库结果在指定的时间范围内设置了“ lastModified”值。这也很好(我认为)。

foreach($result as $value) {
    // Lets find the ones that qualify for first email notification
    if((($value['lastModified'] + $min1st) < $now) && (($value['lastModified'] + $max1st) > $now)) {
        // Now only the entries that have been untouched for 60 days from today are listed here. Yay! Send out an email to the people responsible and remind them! Get user data...

        try {
            $stmt = $conn->prepare("SELECT * FROM users WHERE `uID` = :uid");
            $stmt->bindValue(':uid', $value['uID']);
            $stmt->execute();
            $uRes = $stmt->fetchAll();
        } catch(PDOException $e) { catchMySQLerror($e->getMessage()); }

        // Add +1 to the incremental count
        $a++;

        // Collect some data for the log email
        $arrA[] = $value['entryKey']."-"$value['entryID'];
        $arrA[] = $value['entryName'];
        $arrA[] = $value['entryTitle'];
        $arrA[] = $value['dateStarted'];
        $arrA[] = $value['lastModified'];
        $arrA[] = $uRes[0]['title']." ".$uRes[0]['firstName']." ".$uRes[0]['lastName'];
        $arrA[] = $uRes[0]['email'];


然后它将发送给每个在此if中出现的人。用于发送电子邮件等的代码可以完美运行,因此您无需为此烦恼。每次使用其他参数重复相同的过程-您可以通过观察顶部附近的其他数字时间戳值来猜测其工作方式。因此,让我们继续到此结束(问题所在,在:之后:

    }
}


现在在这里,我想从$ arrA(以及相应的其他数组$ arrB和$ arrC)中提取所有数据,这样我就可以将所有数据弹出到一个整洁的表中,然后将其邮寄给管理员,以便他们知道什么时候发生了什么这一切都运行了。

我的问题是,我不知道如何以可用的方式提取$ arrA。如果我var_dump($arrA);我成功地获得了应该放在其中的所有东西,但是我看不到一种方法来执行每个循环的逐行排序。在执行var_dump($arrA);时,我倾向于这样结束:

array(14) { [0]=> string(15) "ABC-63" [1]=> string(36) "Fish and Chips" [2]=> string(33) "Cod Disposal" [3]=> string(22) "1447283057" [4]=> string(22) "1447286317" [5]=> string(21) "Mr Bob Smith" [6]=> string(22) "[email protected]" [7]=> string(15) "XYZ-104" [8]=> string(23) "Blue Socks" [9]=> NULL [10]=> string(22) "1447286691" [11]=> string(22) "1447326523" [12]=> string(20) "Mrs Rosie Jones" [13]=> string(34) "[email protected]" }


显然,这里有两个数据输入的输出。我想知道如何将其成形为基本上如下所示的输出:

<tr>
<td>ABC-63</td>
<td>Fish and Chips</td>
<td>Cod Disposal</td>
<td>1447283057</td>
<td>1447286317</td>
<td>Mr Bob Smith</td>
<td>[email protected]</td>
</tr>
<tr>
<td>XYZ-104</td>
<td>Blue Socks</td>
<td>NULL</td>
<td>1447286691</td>
<td>1447326523</td>
<td>Mrs Rosie Jones</td>
<td>[email protected]</td>
</tr>


表的开始和结束显然将分别在循环之前和之后。

如何从$ arrA获得此结果?我是否需要以某种方式修改数组中较早版本中存储此数据的方式,以便有某种简单的方法来管理即将结束的输出?

提前致谢。

最佳答案

如果我理解正确,则要输出$arrA元素,每行7个元素。

您可以做的是遍历$arrA,用$line的元素填充临时数组$arrA。每隔7个元素,该行将被填满。然后,您可以对其进行任何操作,例如将其回显到标准输出,然后将其添加到电子邮件变量中,然后重置$line

$line = [];
for ($i = 0; $i < count($arrA); $i++) {
  $line[] = $arrA[$i];
  if ($i % 7 == 6) { //line is filled up with 7 elements
    echo implode($line, " | "); //output elements of line separated with pipe char
    $email .= implode($line, " | ") . "\n"; //add the line to email body
    $line = []; //reset line
  }
}

10-04 12:41