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

时间:2015-07-01 08:39:14

标签: php mysql arrays while-loop

我正在尝试从我的数据库中的数据创建多维数组,其中每一行都是一个数组。我在两个不同的列上尝试了这个,结果各不相同,我不知道为什么。

第一栏循环:

$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);

返回以下内容:

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
        )

)

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

1 个答案:

答案 0 :(得分:1)

在第一个中,您要为数组添加值

$array[] = value;

这只会为数组添加一个值,因此它是一维的。

在第二个explode将返回一个数组,因此你的数组包含数组并且是二维的。

如果需要数组数组,可以使用

$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