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;