从两个相似的 MySQL 结果集创建数组时的行为不一致

Inconsistent behavior when creating arrays from two similar MySQL result sets

我正在尝试从我的数据库中的数据创建多维数组,其中每一行都是一个数组。我在两个不同的专栏上尝试过这个,结果不同,我不确定为什么。

第一列循环:

$db_time_qry = "Select Time from Schedule";
    $db_time_res = mysqli_query($link, $db_time_qry);
    while ($row_c = mysqli_fetch_assoc($db_time_res)) {
        $db_times [] = $row_c['Time'];
    }
    print_r($db_times);

其中 returns 以下 :

Array
(
    [0] => 06:00:00
    [1] => 06:00:00
    [2] => 06:00:00
    [3] => 06:00:00
    [4] => 06:00:00
    [5] => 06:30:00
    [6] => 06:00:00
)

第二列循环:

  $qryDay = ("Select Day from Schedule");
    $day_res_ = mysqli_query($link, $qryDay);
    while ($row_day_ = mysqli_fetch_assoc($day_res_)) {
        if (strlen($row_day_['Day'] == 3)) {
            $day_array_ [] = $row_day_['Day'];
        } else {
            $day_array_ [] = explode(',', $row_day_['Day']);
        }
    }
    print_r($day_array_);

结果为:

Array
(
    [0] => Array
        (
            [0] => Wed
        )

    [1] => Array
        (
            [0] => Tue
        )

    [2] => Array
        (
            [0] => Tue
        )

    [3] => Array
        (
            [0] => Thu
        )

    [4] => Array
        (
            [0] => Mon
        )

    [5] => Array
        (
            [0] => Sun
            [1] => Mon
            [2] => Tue
        )

    [6] => Array
        (
            [0] => Fri
        )

)

第二个循环returns我想要的但是为什么他们在使用相同的循环时返回不同的结果?两个数组都在循环之外声明,如下所示:$db_times = $day_array_ = [];

在第一个中,您将值添加到数组

$array[] = value;

这只会将单个值添加到数组中,因此它是一维的。

第二个 explode 将 return 一个数组,所以你的数组包含数组并且是二维的。

如果你想要一个数组的数组,你可以使用

$array[] = array(value);

所以第一个是

$db_times [] = array($row_c['Time']);

和第二个

if (strlen($row_day_['Day'] == 3)) {
    $day_array_ [] = array($row_day_['Day']);
} else {
    $day_array_ [] = explode(',', $row_day_['Day']);
}

你的strlen也有错误:

strlen($row_day_['Day'] == 3)

这当然应该是

strlen($row_day_['Day']) == 3

如果你想让它工作。由于您正在检查布尔值的 strlen,因此它永远不会匹配并始终转到 explode.