[英]PHP: foreach inside while loop returning only one result
嘗試在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)個客戶端文件夾名稱,並且它始終是文件夾中的最后一個客戶端(az)。
示例輸出:
建立-4.0.0.0
客戶-F
建立-4.0.0.1
客戶d
建立-4.0.0.2
客戶-J
我在這里想念的還是更好的,有沒有更有效的方法? 任何幫助是極大的贊賞!
您每次都要替換$ client_folders變量。 您想在進入while循環之前將其創建為數組,然后執行此操作
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/")));
};
順便說一句,這將只輸入第一個IF,因為第二個完全相同
而不是使用
$client_folders = str_replace("\n","", explode(",", exec("ls -1 /somepath/builds/$b_name/Clients/")));
我建議使用以下代碼列出文件夾。
if ($folderHandle = opendir(clients_dir)) {
while ($file = readdir($folderHandle) {
echo "$file\n";
}
closedir($folderHandle);
}
您可以將該代碼更改為有條件的,但它應該為您提供良好的清單。
exec()
僅返回命令輸出的最后一行。 您應該使用本機PHP函數讀取目錄列表opendir
/ readdir
或glob
將起作用。
if ($client_dir == '1') {
$client_folders = glob("/somepath/builds/$b_name/Client/*", GLOB_ONLYDIR);
} elseif ($clients_dir == '1') {
$client_folders = glob("/somepath/builds/$b_name/Clients/*", GLOB_ONLYDIR);
};
非常感謝mcrumley,您使用'glob'的建議已將其修復! 抱歉,我很顯然是要newb投票支持您的答復。 也許其他用戶可以幫助您。
也感謝克里斯建議的mysqli,我將從這里開始進行編碼,在這里較晚采用。
在解決問題的新代碼下面。
$build_grab = $mysqli->query("SELECT b_id,b_name FROM builds");
while($build_row = $build_grab->fetch_array())
{
$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 = glob("/somepath/builds/$b_name/Client/*", GLOB_ONLYDIR);
} elseif ($clients_dir == '1') {
$client_folders = glob("/somepath/builds/$b_name/Clients/*", GLOB_ONLYDIR);
};
echo $b_name;
echo "\r\n";
foreach($client_folders as $folder)
{
echo $folder;
echo "\r\n";
}
}
再次感謝大家的幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.