请求返回数组

时间:2017-10-02 09:54:31

标签: php

表:

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

我尝试输出date排序的id的最后7个值,但有一些内爆。

$day=$mysqli->query("SELECT `date` FROM `online` ORDER BY `id` DESC LIMIT 7"); 
 $day=$day->fetch_all(); 
   $day="'". implode("', '", $day) . "'";
echo $day;

echo返回'Array', x7。如何输出'01.01','02.01', etc.

5 个答案:

答案 0 :(得分:0)

fetched数组中的每个元素都是其列的数组。

使用array_map调用解开它的一种方法:

$first = function($arr) {
    return $arr[0];
};

$day = $day->fetch_all(); 
$day = array_map($first, $day);
$day = "'". implode("', '", $day) . "'";
echo $day;

答案 1 :(得分:0)

没有任何额外的{{the_detail.nat_hr.ref_number}} {{the_detail.user.profile.nat_hr.ref_number}} 函数,只需要纯 MySql 方法:

php

https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

答案 2 :(得分:0)

问题是$ day-> fetch_all()生成关联数组,而implode不支持关联数组

尝试:

$sql = "SELECT `date` FROM `online` ORDER BY `id` DESC LIMIT 3";

$result = $conn->query($sql);

$day = [];

while($row = $result->fetch_row()) {

  $day[]=$row[0]; }


$day="'". implode("', '", $day) . "'"; echo $day;

答案 3 :(得分:0)

首先,您的代码使用$day在其生命周期中至少存储三种不同的内容。虽然编译器没有抱怨,但对于人类而言,这是令人困惑和难以理解的。让我们重写您的代码,为不同的项目使用不同的变量:

$result = $mysqli->query("SELECT `date` FROM `online` ORDER BY `id` DESC LIMIT 7");
$days = $result->fetch_all();
$text = "'" . implode("', '", $days) . "'";
echo $text;

快速print_r($days)会告诉您$result->fetch_all();返回的值是二维数组。它的每个项都是一个数组,结果集中有一行。

有很多方法可以获取date返回的每一行的$result->fetch_all()列。最容易阅读和理解的方法是要求mysqli_result::fetch_all()将行返回为由列名索引的associative arrays(默认情况下,它返回以数字方式索引的数组),然后使用函数array_column()仅获取date列的值,并仅将其传递给implode()

代码是这样的:

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

可读性(性能损失小)和正确性的下一步是在加入决赛之前单独引用每天串。函数array_map()可以用于此;它将回调函数应用于传递的数组的每个项,并返回一个包含回调函数返回的值的新数组。

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

使用不返回任何结果的查询进行快速测试(使用空表或添加不可能的WHERE条件)会发现此代码不会产生任何输出(这是正确的,因为没有从原始代码生成一对空撇号(''),这是不正确的(让我们记住要求是将每一天放在单引号中并用逗号和空格分隔日期) 。)

答案 4 :(得分:-1)

要查看您拥有的是否是您想要的,请开始替换:

SWPrecacheWebpackPlugin

使用:

echo $day;

如果您看到了自己想要的内容,那么您的SQL请求就能正常运行。接下来,像@Mureinik所说,在数组中导航。
如果您想要更清洁的显示,可以使用:

print_r($day);
  

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre" pre" element表示预先格式化的文本。此元素中的空格显示为已键入。