Php 请求返回数组
表: 我试图输出Php 请求返回数组,php,Php,表: 我试图输出date中的最后7个值,这些值按id排序,并带有一些内爆 id | date | number ---------------------- 1 | 01.01 | 12 2 | 02.01 | 15 3 | 03.01 | 174 4 | 04.01 | 14 5 | 05.01 | 65 6 | 06.01 | 78 7 | 07.01 | 69 8 | 08.01 | 147
date
中的最后7个值,这些值按id
排序,并带有一些内爆
id | date | number
----------------------
1 | 01.01 | 12
2 | 02.01 | 15
3 | 03.01 | 174
4 | 04.01 | 14
5 | 05.01 | 65
6 | 06.01 | 78
7 | 07.01 | 69
8 | 08.01 | 147
9 | 09.01 | 12
10 | 10.01 | 87
echo
返回'Array',
x7。如何输出'01.01'、'02.01'等。
?获取的数组中的每个元素都是其列的数组
使用array\u map
调用来分解它的一种方法:
$day=$mysqli->query("SELECT `date` FROM `online` ORDER BY `id` DESC LIMIT 7");
$day=$day->fetch_all();
$day="'". implode("', '", $day) . "'";
echo $day;
没有任何附加的
php
函数,只需纯MySql方法:
$first = function($arr) {
return $arr[0];
};
$day = $day->fetch_all();
$day = array_map($first, $day);
$day = "'". implode("', '", $day) . "'";
echo $day;
要查看您拥有的是否是您想要的,请开始更换:
$result = $mysqli->query("SELECT group_concat(`date` separator ', ') as dates
FROM `online` ORDER BY `id` DESC LIMIT 7");
$days = $result->fetch_assoc(); // $days['dates'] contains the needed string
print_r($day);
与:
echo $day;
如果您看到了自己想要的东西,那就是您的SQL请求工作得很好。接下来,在数组中导航,如@Mureinik所说如果您想要更干净的显示,可以使用:
echo”“;打印(天);回声“;
“pre”元素表示预先格式化的文本。此元素中的空白显示为已键入
问题是$day->fetch_all()生成关联数组,而内爆不支持关联数组
尝试:
首先,您的代码在其生命周期中使用
$day
存储至少三种不同的内容。虽然编译器没有抱怨,但它让人感到困惑和难以理解。让我们重写代码,为不同的项目使用不同的变量:
$result = $mysqli->query("SELECT `date` FROM `online` ORDER BY `id` DESC LIMIT 7");
$days = $result->fetch_all();
$text = "'" . implode("', '", $days) . "'";
echo $text;
快速打印($days)将显示$result->fetch_all()返回的值代码>是一个二维数组。它的每个项都是一个数组,即结果集中的一行
有许多方法可以获取$result->fetch_all()
返回的每一行的date
列。最容易阅读和理解的方法是要求返回按列名索引的行(默认情况下,它返回以数字索引的数组),然后使用函数仅获取date
列的值并仅将其传递给
代码如下所示:
$result = $mysqli->query("SELECT `date` FROM `online` ORDER BY `id` DESC LIMIT 7");
$days = $result->fetch_all(MYSQLI_ASSOC);
$text = "'" . implode("', '", array_column($days, 'date')) . "'";
echo $text;
实现可读性(性能损失较小)和正确性的下一步是在将它们加入到最终字符串之前分别引用每天。该功能可用于此目的;它对传递的数组的每个项应用回调函数,并返回一个包含回调函数返回的值的新数组
$result = $mysqli->query("SELECT `date` FROM `online` ORDER BY `id` DESC LIMIT 7");
$days = $result->fetch_all(MYSQLI_ASSOC);
$text = implode(', ', // Join the quoted days with commas
array_map(
function($day) {
return "'{$day}'"; // Put each day in single quotes
},
array_column($days, 'date') // Get only the 'date' column
)
);
echo $text;
对不返回任何结果的查询进行快速测试(使用空表或添加不可能的,其中
条件)表明,此代码不生成任何输出(这是正确的,因为没有从数据库检索到数据),而原始代码生成一对空撇号('
),这是不正确的(让我们记住,要求将每天放在单引号中,并用逗号和空格分隔日期。)我不确定,但可能在调用查询输出时,您必须定义数组?由于$day[0]fetch_all()将返回一个二维数组,第一级是行,第二级是列。只请求一列并不会神奇地将每一列变为字符串,它仍然是一个数组。@EdgarCooper您是否尝试查看文档()?如果您纯粹想输出它们,只需使用var_dump($day)代码>而不是echo$day
语法错误,意外的“$day”(T_变量)
-$day=array_映射($first,$day)代码>@EdgarCooper在那里忘了一个分号,谢谢注意。已编辑并修复。不,仍然返回Array
1个问题。我将desc
更改为asc
,以使我的图形显示良好。它从01.01
输出到07.01
,但如果表中有08.01
,则不会显示。如果我将使用desc
,我的图形将水平反转。限制
在按顺序
后应用。如果没有LIMIT
,查询将按照orderby
指定的顺序返回所有行<代码>限制n
仅保留前n
行。如果要从resultset中获取最后的n
行,请按降序排序,然后在客户端代码(PHP或javascript)中按所需顺序再次排序。或者将原始查询包装到另一个执行所需重新排序的SELECT
:SELECT*FROM(SELECT`date`FROM`online` ORDER BY`id`DESC LIMIT 7)ORDER BY`id`ASC
。现在它返回一个错误:Uncaught error:调用布尔(在fetch_all)堆栈跟踪上的成员函数fetch_all():#0{main}这意味着查询不是正确的SQL。内部查询返回的结果集中没有id
列。正确的查询是SELECT`date`FROM(SELECT`id`,date`FROM`online`ORDER BY`id`DESC LIMIT 7)a ORDER BY`id`ASC
。
$result = $mysqli->query("SELECT `date` FROM `online` ORDER BY `id` DESC LIMIT 7");
$days = $result->fetch_all(MYSQLI_ASSOC);
$text = "'" . implode("', '", array_column($days, 'date')) . "'";
echo $text;
$result = $mysqli->query("SELECT `date` FROM `online` ORDER BY `id` DESC LIMIT 7");
$days = $result->fetch_all(MYSQLI_ASSOC);
$text = implode(', ', // Join the quoted days with commas
array_map(
function($day) {
return "'{$day}'"; // Put each day in single quotes
},
array_column($days, 'date') // Get only the 'date' column
)
);
echo $text;