从两个相似的 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
.
我正在尝试从我的数据库中的数据创建多维数组,其中每一行都是一个数组。我在两个不同的专栏上尝试过这个,结果不同,我不确定为什么。
第一列循环:
$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
.