【发布时间】:2013-10-27 16:07:54
【问题描述】:
在 PHP 的 while 循环中尝试执行 foreach 时遇到问题。我正在从数据库表中提取构建名称。这些构建名称恰好是文件夹名称。这些文件夹中有一个文件夹(客户端或客户端),其中有以客户公司名称命名的文件夹。我希望脚本向我显示构建名称(已通过回显完成),然后在构建名称下方列出每个文件夹。
$build_grab = mysql_query("SELECT b_id,b_name FROM builds", $link);
while($build_row = mysql_fetch_array($build_grab))
{
$b_id = $build_row['b_id'];
$b_name = $build_row['b_name'];
$client_dir = is_dir("/somepath/builds/$b_name/Client/");
$clients_dir = is_dir("/somepath/builds/$b_name/Clients/");
if ($client_dir == '1') {
$client_folders = explode(",", exec("ls -1 /somepath/builds/$b_name/Client/"));
} elseif ($clients_dir == '1') {
$client_folders = str_replace("\n","", explode(",", exec("ls -1 /somepath/builds/$b_name/Clients/")));
};
echo $b_name;
echo "\r\n";
foreach($client_folders as $folder)
{
echo $folder;
echo "\r\n";
}
}
不幸的是,这似乎每次构建只给我一 (1) 个客户端文件夹名称,并且它始终是文件夹中的最后一个客户端 (a-z)。
示例输出:
build-4.0.0.0
Client-f
build-4.0.0.1
Client-d
build-4.0.0.2
Client-j
我在这里缺少什么或更好的是,有没有更有效的方法来做到这一点?非常感谢任何帮助!
【问题讨论】:
-
不要使用
mysql_*库。使用mysqli_*或PDO。 -
我没有检查您的代码,但您可能在 for 循环(或 while 循环)中初始化了变量,因此每次进入 for 或 while 循环时都会覆盖所有其他变量。
-
foreach($folder as $subfolder) { // ... stuff ... } -
如果您决定在 StackOverflow 上提问,请花几分钟时间来正确格式化您的代码。如果代码有适当的缩进,阅读代码会容易得多。
-
Chris - 感谢您的 msyqli 建议,我会考虑到这一点,但此时从数据库中提取数据不是问题。 Koray - 如果您能详细说明并指出任何错误,我将非常感谢您的帮助。 Amal - 我已经在使用这种语法了,谢谢。 Sumurai8 - 很抱歉格式问题。
标签: php mysql foreach while-loop