如何从php数组中以有序的方式提取数据?

时间:2016-02-10 11:49:52

标签: php mysql arrays

我不是一名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) "bob.smith@mail.com" [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) "r.jones@mail.com" }

显然,此处有两个数据条目的输出。我知道如何将其塑造成基本上如下的输出:

<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>bob.smith@mail.com</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>r.jones@mail.com</td>
</tr>

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

如何从$ arrA获得此结果?我是否需要以某种方式修改我之前在数组中存储此数据的方式,以便在接近结束时使用某种简单的方法来管理此输出?

提前致谢。

3 个答案:

答案 0 :(得分:1)

如果我理解正确,你想输出$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
  }
}

答案 1 :(得分:0)

这个会有所帮助:

foreach($arrA as $index=>$value){
   echo($value.' |');
}

造型取决于你。但如果您需要进一步的帮助,请及时通知我。

答案 2 :(得分:0)

感谢@quentinadam,我受到启发试试这个。这不是我想要使用的角度,但确实有效。

echo "<table border=\"1\">\n<tbody><tr>\n";
$i = 0;
foreach($arrA as $thing) {
    if($i == 7) {
        echo "</tr>\n<tr>\n";
    }
    echo "<td>".$thing."</td>\n";
    $i++;
    if($i == 8) {
        $i = 1;
    } else {
        $i = $i;
    }
}
echo "</tr></tbody>\n</table>\n\n";

我要投票给昆汀加丹,因为它在正确的轨道上但尚未投票。