У меня есть запрос mysql, который служит основой для вывода файла CSV с использованием PHP. У меня есть оператор foreach, который делает каждый столбец в таблице также столбцом в выводе CSV.
foreach($rowr as $name => $value)
Моя проблема в том, что мне нужно опустить один из столбцов в запросе (Img AS source
) из вывода в виде столбца.
В настоящее время я делаю это для значения MLSNumber, используя
foreach($rowr as $name => $value)
{
if($name !='MLSNumber'){
$csv_output .= $name . "\t";
}
Я попытался обновить эту строку следующим образом: $name !='MLSNumber' || $name !='source'
$name !='MLSNumber' || $name !='source'
но он прерывает код, когда я это делаю, и заканчиваю тем, что показываю как столбцы. Как опустить оба столбца?
$values = @mysqli_query($connect,"SELECT MLSNumber AS MLSNumber, ListAgentMLSID AS agent_ids, Matrix_Unique_ID AS mls, City AS city, PostalCode AS zip, REPLACE(PropertyInformation, '\r\n', '') AS description, SubCondoName AS neighborhood, ListPrice AS price, VirtualTourURL AS virtual_tour_1, Bedrooms AS bedrooms, BathsTotal AS bathrooms_full, ApproxLivingArea AS living_area, Img AS source FROM table-name WHERE ListOfficeName LIKE 'Company%' AND ListPrice >= 500000 AND PhotoCount >=4 ORDER BY CreatedDate DESC");
$row = 0;
while ($rowr = mysqli_fetch_assoc($values))
{
if ($row == 0)
{
$csv_output .= "state\t";
$csv_output .= "country_code\t";
$csv_output .= "email\t";
foreach($rowr as $name => $value)
{
if($name !='MLSNumber'){
$csv_output .= $name . "\t";
}
}
$csv_output .= "image_filename_1\timage_filename_2\timage_filename_3\timage_filename_4\timage_filename_5\tlink_url_1\tlink_text_1";
$csv_output .= "\n";
}
$row++;
$csv_output .= "FL\t";
$csv_output .= "US\t";
$csv_output .= "lreInquiry@my-url-link\t";
foreach($rowr as $name => $value)
{
if($name !='MLSNumber'){
if($name=='mls') {$jpg_name=$value;}
if($name=='source') {$source_link=$value;}
$csv_output .= $value."\t";
}
}
{
$csv_output .= "http://www.my-url-link/feeds/".$source_link."/rets_images/".$jpg_name."_1.jpg\t http://www.my-url-link/feeds/".$source_link."/rets_images/".$jpg_name."_5.jpg\t http://www.my-url-link/feeds/".$source_link."/rets_images/".$jpg_name."_2.jpg\t http://www.my-url-link/feeds/".$source_link."/rets_images/".$jpg_name."_3.jpg\t http://www.my-url-link/feeds/".$source_link."/rets_images/".$jpg_name."_4.jpg";
}
foreach($rowr as $name => $value)
{
if($name=='MLSNumber') {$home_name=$value;}
}
{
$csv_output .= "\thttp://www.my-url-link/search-results/?fullinfo=".$home_name."\tMore Details ";
}
$csv_output .= "\n";
}
В: Есть ли способ настроить оператор foreach
для исключения столбца source
?
A: Нет, нет настройки для foreach
, которая исключает элемент.
Непонятно, почему вы хотите сделать эту конкретную настройку, так как тело цикла foreach включает ссылки на source
столбец (имя столбца в наборе результатов, которое содержит значение столбца Img
).
if($name=='source') {$source_link=$value;}
Если мы хотим опустить этот столбец из строки в CSV, почему бы нам просто не пропустить выполнение этой одной строки:
$csv_output .= $value."\t";
для имени столбца, которое мы хотим исключить.
Например, мы могли бы заменить эту строку следующим:
if( $name!='source' ) {
$csv_output .= $value."\t";
}
Чтобы ответить (снова) на вопрос, который был задан:
Нет, нет регулировки для инструкции foreach
, которая пропускает или пропускает некоторые элементы.
Прежде всего, если вы делаете foreach, это означает, что вы пытаетесь концептуально со всеми элементами массива, возможно, вам понадобится некоторое время.
Из моего понимания того, что вы заявили здесь, и сохранения расстояний, вы можете попробовать два решения.
$excludedColumnArr = array('source', 'MLSNumber', 'columnY', ...); foreach($rowr as $name => $value) { if(!in_array($name, $excludedColumnArr)){ ... } }
Надеюсь это поможет.