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

PHP: How do you avoid the use of extract() in a specific case

我是 PHP 的新手,到处都在阅读不推荐使用提取功能的信息。我正在从 mysql table 获取数据以填充网站的一部分。因此我不知道 table 可以有多少行。

所以我正在使用提取函数,它为每一行提供一个数组数组。为了创建一些有助于 'echoing' 每个字段的变量,我正在使用此代码:

$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, 等等(这会在注释中提到,所以这些变量在回溯时有解释。

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

我们清理了所有 posted 到数据库的内容,所以应该没有问题。 (此外,管理员是唯一可以 post 获取信息的人)。无论如何帮助将不胜感激。

计数变量:

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

    $number_of_rows_in_your_array = count($arrayrows);

更清洁的解决方案:

您没有具体说明要如何填充站点。假设您想用相同的行结构填充一个简单的 table,那么您不需要 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 变量。

您可以使用 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];

变量越多越短。