javascript - 在 foreach 语句的数组中包含空值

标签 javascript php mysql arrays

编辑:我之前尝试过简化它,但我想我会把它全部放在那里,因为它可能会消除一些关于我要实现的目标的困惑。

我正在使用两个 mySQL 表创建一个 javascript 图表,在同一个图表上显示条形图和折线图。显示出席人数的折线图和显示该日期完成的酿造过程的条形图。 表 A:

id |   date   | attended
1  |2015-01-14| 3
2  |2015-01-20| 4
3  |2015-01-31| 2
4  |2015-02-21| 3
5  |2015-02-25| 4
6  |2015-03-16| 4

表 B:

id |    name    |    brewdate   | bottledate
1  | Honey Ale  |   2015-01-14  | 2015-02-21
2  |     IPA    |   2015-01-14  | 2015-01-31
3  |   Porter   |   2015-01-20  | 2015-02-25
4  | Brown Ale  |   2015-02-21  | 2015-03-16

使用下面的代码,我可以获取数组以用于 zingchart:

<?php
    $sql = "SELECT * DATE_FORMAT(DATE(date), '%m/%d') AS bpdate
    FROM TableA ORDER BY date";
    $data = $conn->query($sql);
?>
<script
    //GET array of attendance for line chart
    var present=[<?php
    mysqli_data_seek($data, 0);
    while($info=mysqli_fetch_array($data)) {
        echo $info['present'].",";
    }
    ?>];
    //Get dates for x-axis of chart
    var dates=[<?php
    mysqli_data_seek($data, 0);
    while($info=mysqli_fetch_array($data))
        echo '"'.$info['bpdate'].'",';
    ?>];
    <?php
        $sql = "SELECT COUNT(TableB.brewdate) AS brewed
        FROM TableB
        RIGHT JOIN TableA
        ON TableB.brewdate=TableA.date
        GROUP BY TableA.date ORDER BY TableA.date";
        $events = $conn->query($sql);
    ?>
    //Get number of beers brewed per date
    var brewed=[<?php
    while($info=mysqli_fetch_array($events)) {
        echo $info['brewed'];
    }
    ?>];
    <?php
        $sql = "SELECT TableB.*
        FROM TableB
        RIGHT JOIN TableA
        ON TableB.date=TableA.date
        ORDER BY TableA.date";
        $names = $conn->query($sql);
    ?>
    //Get the name of each beer that was brewed.
    var brewednames=[<?php
    while($info=mysqli_fetch_array($names))  {
        echo '"' . $info['name'] . ',"';
    }
    ?>];
</script>

这给了我这个:

var present=[3,4,2,3,4,4];
var dates=["01/14","01/20","01/31","2/21","02/25","03/16"];
var brewednames=["Honey Ale","IPA","Porter","","Brown Ale","",""];

我遇到的问题是变量 brewednames。它正确地为我提供了啤酒列表,其中空白填充了没有酿造啤酒的日期,但它列出了不同数组元素中具有相同日期的啤酒,我希望它们显示在同一个元素中。像这样:

var brewednames=["Honey Ale IPA","Porter","","Brown Ale","",""];

这背后的原因是当用户将鼠标悬停在图表上相应的栏上时会显示此数组。因此,与其显示该日期酿造的啤酒数量,我希望它给出该日期酿造的所有啤酒的名称。

我找到了 this article这能够帮助我将在同一日期酿造的每种啤酒分组在同一数组元素中,但现在它们没有根据日期排序,因为所有空白都已移至数组的开头:

var brewednames=[<?php
$info = array();
while($row=$names->fetch_assoc())  {
    $date = $row['date'];
    $name = $row['name'];
    $info[$date][] = $name;
}
foreach ($info as $date => $values) {
    echo '"';
    foreach($values as $value) {
        echo $value . ' ';
    }
    echo '",';
}
?>];

这给了我这个:

var namegroup=["   ","Honey Ale IPA","Porter","Brown Ale"]

任何帮助将不胜感激。此外,我确信我的代码并不完美,因为我有点自学 mySQL 和 PHP,所以如果有任何关于更清晰/更好的代码的建议,请随时参与。谢谢。

最佳答案

<?php
    $sql = "SELECT TableB.*
    FROM TableB
    RIGHT JOIN TableA
    ON TableB.date=TableA.date
    ORDER BY TableA.date ASC";
    $names = $con->query($sql);
?>
var namegroup=[<?php
$info = array();
$weirdArr = array();
while($row=$names->fetch_assoc())  {
    $date = $row['date'];
    $name = $row['name'];
    $info[$date][] = $name;
    $weirdArr[] = $name; 
}
echo implode(',',$weirdArr);
?>];

WEIRD UPDATE 要获取引号中的字符串,只需将行替换为:

echo '"'.implode('","',$weirdArr).'"';

奇怪的更新 2

<?php
        $sql = "SELECT TableA.date, GROUP_CONCAT(TableB.name SEPARATOR ' ') as gr_name
        FROM TableB
        RIGHT JOIN TableA
        ON TableB.date=TableA.date
        GROUP BY TableA.date
        ORDER BY TableA.date ASC";
        $names = $con->query($sql);
    ?>
    var namegroup=[<?php
    $info = array();
    $weirdArr = array();
    while($row=$names->fetch_assoc())  {
        $date = $row['date'];
        $name = $row['gr_name'];
        $info[$date][] = $name;
        $weirdArr[] = $name; 
    }
    echo implode(',',$weirdArr);
    ?>];

关于javascript - 在 foreach 语句的数组中包含空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30065015/

相关文章:

用于检查链接上次修改时间的 PHP 脚本

php - 在左连接上显示 AVG

javascript - 如何通过从数据库中检索值来在文本框中显示值?

javascript - 更新页面 JSON 数据获取下拉更改

javascript - React 应该将表单元素作为一个单独的组件吗?

javascript - Redux - 多个商店,为什么不呢?

php - MySQL 左连接 'b' s 限制

javascript - 简化 if else 语句

php - 将 DateTime 舍入到最接近的四分之一小时

php - PHP 的 gmmktime() 在 Dart/Flutter 中的等价物是什么?