ИСПОЛЬЗУЙТЕ запрос MySQL в переменной PHP, но не включайте в вывод CSV

0

У меня есть запрос 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";    
}
  • 0
    Для тех, кто сталкивается с этим, я заменил && на || в части if! =, и она отлично работала.
Теги:

2 ответа

1
Лучший ответ

В: Есть ли способ настроить оператор 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, которая пропускает или пропускает некоторые элементы.

1

Прежде всего, если вы делаете foreach, это означает, что вы пытаетесь концептуально со всеми элементами массива, возможно, вам понадобится некоторое время.

Из моего понимания того, что вы заявили здесь, и сохранения расстояний, вы можете попробовать два решения.

  1. Сначала измените свой запрос (SELECT aa, bb, cc,...), чтобы нежелательный столбец не стал частью ваших результатов.
  2. Другой способ - попробовать эту общую форму:
    $excludedColumnArr = array('source', 'MLSNumber', 'columnY', ...);

    foreach($rowr as $name => $value) {
      if(!in_array($name, $excludedColumnArr)){ 
        ...    
      }
  }

Надеюсь это поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню