将前三个结果保存在给定变量名的while循环中?

Posted

技术标签:

【中文标题】将前三个结果保存在给定变量名的while循环中?【英文标题】:Save the first three results in a while loop with given variable names? 【发布时间】:2016-08-30 17:38:52 【问题描述】:

我想将我的 SQL 查询的前三个结果保存在变量 $row1$row2$row3 中,并将它们返回给 ajax。 SQL 查询对顺序进行排序,以便前三个循环将是我要保存的顺序。

问题是,我只能弄清楚如何将其中一个保存在 $row1 中,但是让另外两个单独的变量等于 ex.nu 和 lol.de 我不能。

id | url
---+------------
 1 | www.hi.com //Save
 2 | www.ex.nu  //Save
 3 | www.lol.de //Save
 4 | www.mo.ae  //Skip
//DB-setup

-

while ($row = mysqli_fetch_array($result)) 
    $row1 = $row['url']; //Works
    //$row2 = $row['url']; Second result, tried using [1]
    //$row3 = $row['url']; Third result, tried using [2]


echo 
  json_encode(array(
    'row1' => $row1,
    'row2' => $row2,
    'row3' => $row3
  ))
;

简单地,收集前三个项目并将它们保存在给定的变量中。有一个简单的解决方案吗?

任何帮助/提示/链接将不胜感激。

【问题讨论】:

只需将 LIMIT 3 添加到您的 sql 查询的末尾 还有http://php.net/manual/en/mysqli-result.fetch-all.php 他不只是要求限制。他还要求将每一行的值转换为局部变量。 您是否需要具有以下名称的变量和数组键:row1row2row3 LIMIT 3?将它们放在变量部分是我遇到的麻烦。使$row1 等于 hi.com,$row2 等于 ex.nu。 @AlexanderGuz 不一定,不 【参考方案1】:

如果要将它们存储到$row1$row2$row3,则需要使用变量变量。试试下面的:

$query = "select * from url_list order by url asc limit 3";
$result = mysql_query($query);
$i = 1;
while ($data = mysql_fetch_array($result)) 
   $variable = 'row'.$i++;
   $$variable = $data['url'];


echo 
  json_encode(array(
     'row1' => $row1,
     'row2' => $row2,
     'row3' => $row3
  ));

【讨论】:

将它们放在单个变量中是我遇到的问题 @AlgernopK。我编辑了我的答案。希望这个对你有用。【参考方案2】:

您可以通过多种方式做到这一点。

在 SQL 查询中使用 LIMIT

$query = "SELECT ... LIMIT 3";
$result = <execute_query>;

$rows = [];
$rowIndex = 0;
while ($row = mysqli_fetch_array($result)) 
    $rows[sprintf("row%d", ++$rowIndex)] = $row['url'];


echo json_encode($rows);

限制代码行数

$query = "SELECT ... "; // without limit
$result = <execute_query>;

$rows = [];
$rowIndex = 0;
$limit = 3;
while ($row = mysqli_fetch_array($result)) 
    if (++$rowIndex >= $limit) 
        break;
    

    $rows[sprintf("row%d", $rowIndex)] = $row['url'];


echo json_encode($rows);

使用 LIMIT 和 array_column

如果您不关心结果数组中的键,则此变体将起作用。

$query = "SELECT ... LIMIT 3";
$result = <execute_query>;

$rows = mysqli_fetch_all($result);
$urls = array_column($rows, 'url');

echo json_encode($urls);

如果你想将 URL 放在变量中,那么在你得到数组之后就可以:

// works only with numerical arrays
list($row1, $row2, $row3) = $urls;

【讨论】:

以上是关于将前三个结果保存在给定变量名的while循环中?的主要内容,如果未能解决你的问题,请参考以下文章

为啥根变量最终会保留在 while 循环中生成的整个树的结果?

为 while 循环结果创建一个变量

bash的循环中无法保存变量

在 pine 脚本中使用循环时保存以前的条形值

如何将前一个表达式的结果分配给变量?

同时读取两个文件进行while循环