【发布时间】:2015-08-26 00:31:05
【问题描述】:
我对 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等(这会在评论中提到,所以这些变量在回溯时会有解释。
但我想知道这是否正确使用,或者是否有更简单、更清洁的解决方案来实现相同的结果。或者,如果有一定的行数限制(即六行),你会以不同的方式做吗?
我们会对发布到数据库的所有内容进行清理,因此不会有任何问题。 (此外,管理员是唯一可以在那里发布信息的人)。无论如何,我们将不胜感激。
【问题讨论】:
-
你能解释一下你在用这个代码做什么:
foreach ($arrayrows as $arrayrow) { $i = $arrayrow; };?您是否要查找$arrayrow中的最后一个值? -
不明白为什么你不只使用数组
-
你为什么首先使用extract?为什么数组元素必须成为变量名?我很困惑为什么你需要这样做。也许您可以发布更多代码,以便我们更好地了解您的需求?
-
extract有它的位置,我想(有理由的)担心是它会用任意的、隐式定义的变量污染当前范围——这使得人们很难对代码进行推理你写。请记住,代码是“一次编写,经常阅读”。从您提供的示例代码中很难看出您的意图是什么,但我建议嵌套循环可能是合适的,并且更具可读性。 -
好的,感谢四位您对此的意见。 @Darragh 对于您的第一条评论:
fetch_all函数为我提供了一个数组,其中包含表中每一行的嵌套数组。第一个foreach让我分别提取每个“行数组”并为每个字段分配一个自定义$i变量。 @Dagon,@raduation 你的意思是像$array[]["fieldname"]?我必须将数组的每个字段放在几个地方,所以我发现只要我想放置任何东西,简单地放置echo $variablename会更容易,因为它也可以提高可读性。 (对比$array[]["fieldname"])