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];
变量越多越短。
我是 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];
变量越多越短。