我有一个mysql查询,它是使用PHP输出CSV文件的基础。我有一个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'
但是当我这样做时它会破坏代码并最终显示为列。如何省略这两列?
$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 :(得分:1)
问:有没有办法调整foreach
语句以排除source
列?
答:不,没有调整foreach
会排除元素。
目前尚不清楚为什么要进行特定调整,因为foreach循环的主体包含对source
列的引用(结果集中列的名称,其中包含{{1}的值列。)
Img
如果我们想从CSV中的行中省略该列,为什么我们不会跳过这一行的执行:
if($name=='source') {$source_link=$value;}
表示我们要排除的列名。
例如,我们可以用以下内容替换那一行:
$csv_output .= $value."\t";
回答(再次)提出的问题:
不, if( $name!='source' ) {
$csv_output .= $value."\t";
}
语句没有调整会省略或跳过某些元素。
答案 1 :(得分:1)
首先,如果你正在做一个foreach,这意味着你在概念上尝试使用数组中的所有元素,你可能应该使用一段时间。
根据我对你所说的内容和节省距离的理解,你可以尝试两种解决方案。
$excludedColumnArr = array('source', 'MLSNumber', 'columnY', ...); foreach($rowr as $name => $value) { if(!in_array($name, $excludedColumnArr)){ ... } }
希望这有帮助。