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

时间:2016-08-30 17:38:53

标签: php mysql sql mysqli

我想在变量$row1$row2$row3中保存我的SQL查询的前三个结果,并将它们返回给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
  ))
;

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

非常感谢任何帮助/提示/链接。

2 个答案:

答案 0 :(得分:3)

如果要将它们存储到$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
  ));

答案 1 :(得分:-1)

你可以通过多种方式实现。

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