PHP:如何在特定情况下避免使用extract()

时间:2015-08-26 00:31:06

标签: php mysql arrays extract

我是PHP的新手,并且到处都在阅读不建议使用提取功能。我从mysql表中获取数据以填充网站的一部分。因此,我不知道桌子可以有多少行。

所以我使用了extract函数,它为每行提供了一个数组数组。为了创造一些有助于“回声”的变量。我使用此代码的每个字段:

$query = "SELECT * FROM example";
$result = mysqli_query($link,$query);
$num = mysqli_num_rows($result);
$gharray = mysqli_fetch_all($result,MYSQLI_ASSOC);
$arrayrows = array_keys($gharray);
foreach ($arrayrows as $arrayrow) {
   $i = $arrayrow;
};
foreach ($gharray[$i] as $ghimg) {
   extract ($gharray[$i], EXTR_PREFIX_ALL, "img"."$i");
};

完成工作并创建变量,例如: $img1_title, $img1_description, $img2_title等等(这将在评论中提及,因此这些变量在回溯时会有解释。

但我想知道这是否正确使用,或者是否有更简单,更清洁的解决方案来实现相同的结果。或者,如果有一组行限(即六行),你会采用不同的方式吗?

我们清理发布到数据库的所有内容,这样就不会有问题。 (另外,管理员是唯一可以在那里发布信息的人)。无论如何,帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以使用list (),但您需要一个枚举数组。检查PHP文档:

$row = [];
$row[0] = 123;
$row[1] = 'data';
 list($id, $data) = $row; 

http://php.net/manual/en/function.list.php

基本上list($id, $data) = $row;会:

$id = $row[0];
$data = $row[1];

对于更多变量,这会更短。

答案 1 :(得分:0)

计算变量:

要计算变量(这似乎是你第一次循环的意图?),你可以使用:

    $number_of_rows_in_your_array = count($arrayrows);

更清洁的解决方案:

您对如何填充网站并不十分具体。假设您想要填充具有相同行结构的简单表,那么您不需要x变量。相反,你可以用这样的东西替换你的两个循环:

    echo '
    <table>
      <tr>
        <td>
          Header row
        </td>
      </tr>';
      for($x=0;$x=count($arrayrows);$x++){
        echo '
        <tr>
          <td>
             '.$arrayrows[$x].'
          </td>
        </tr>';
      }
    echo '
    </table>';

在这里,我使用数组,并在每次迭代时显示$ ith元素。因此,不需要x变量。