簡體   English   中英

從數組更改輸出文本

[英]Changing output text from array

我當前正在打印已過濾的表列名稱,但需要更改每個列的文本。 例如,以下內容:

$row = mysql_fetch_assoc($query_columns);
echo implode(', ', array_keys( array_filter( $row )));

輸出:

column_one, column_two, column_five

沒有冗長的if語句,我無法實現的是一種完全控制輸出的方法,例如更改每個輸出...

預期產量:

This is column one, and Column two, but this is column five

任何幫助深表感謝!

表結構:

Category
--------
user_id
live_out
live_in
short_term
weekday
weekend
unsure

當前輸出(基於用戶選擇):

live_out, live_in, weekday

所需的輸出:

Yes as live-out, Yes as live-in, Yes for regular weekdays

您有echo implode(', ', array_keys( array_filter( $row ))); implode()使用數組將鍵連接到一個字符串。

一種解決方案是在迭代數組時使用字符串連接:

$array = array_keys( array_filter( $row ))); // gets you the keys array

$string = 'This is ';
foreach($array as $item)
{
    $string .= $item . ', '; // append item to string with comma added
}
$string .= '. That's all.';

echo $string;

如果要為每個項目自定義文本,則需要在迭代時檢測到該項目。 您可以為此使用if和strpos(),如下所示:

$string = 'This is ';
foreach($array as $item)
{
    $string .= $item . ', '; // append item to string with comma added

    if(false !== strpos($item, 'Column One')) { // look for Column One in $item
        $string .= ' (found column one)';
    }    
}
$string .= ' That's all.';

echo $string;

更換:

$string = str_replace('Column One', 'Column XXX', $string);

同時適用於多個項目

$replace = array('Column One', 'Column Two');
$with = array('Column XX1', 'Column XX2');
$string = str_replace($replace, $with, $string);

注意$string =$string .= 第一個分配值,第二個附加值。

根據您的表結構

$string = '';
foreach($array as $item)
{   
    if(false !== strpos($item, 'live_out')) { 
        $string .= 'Yes for '. $item . ', ';
    }

    if(false !== strpos($item, 'live_in')) { 
        $string .= 'Yes for '. $item . ', ';
    }

    if(false !== strpos($item, 'weekdays')) { 
        $string .= 'Yes for regular '. $item;
    }    
}   

echo $string;

您可以像這樣更改數組中的每一項;

$column_names[0] = "Add this to the start of column one ". $column_names[0] . ", and this to the end of column one.";

0是數組中的第一項,1是第二項,依此類推。

請記住,在這種情況下,需要對從array_keys獲得的數組執行此操作。

否則,您可以執行如下功能:

function addStrToArrayElements($array, $str_start, $str_end, $array_keys=NULL){
    foreach($array as $key => $item){
        if(array_key_exists($key, $array_keys) ||  is_null($array_keys) ){
            $ret[$key] = $str_start.$item.$str_end;
        }
    }
    return $ret;
}

$ array是您要更改元素的數組,$ str_start是要放在項目前面的字符串,$ str_end是要在項目后面的字符串,$ array_keys是要更改其元素的鍵的數組,如果將其保留為空白,它將對$ array的所有元素執行相同的操作。

對於上面的示例,您可以執行以下操作:

$column_names = array_keys($row);
addStrToArrayElements($column_names, 'This is ', ',', array(0));
addStrToArrayElements($column_names, ' and ', ',', array(1));
addStrToArrayElements($column_names, ' but this is ', '', array(2));
$output = implode('', $column_names);
echo str_replace('column_', 'column ', $output);

那應該輸出

This is column one, and column two, but this is column five

假設您在下面有一個名為$ array1的數組:

<?php
$array1 = array("hey","its","me","so","what");
$newarray = array();
$i=0;
foreach ($array1 as $value)
{

  $newarray[] = "<span id=" . "color$i" . ">" . $value . "</span>";
  $i++;
}

echo implode(",",$newarray);
?>

您可以使用算法使用創建的跨度為所有列設置不同的樣式。 因此,例如,您可以在標題或外部樣式表中設置樣式,如下所示:

<style>
#color0{ color:red;}
#color1{ color:blue;}
#color2{ color:yellow;}
</style>

我對此進行了測試,看來一切正常!

為什么要投票? 這項工作!!!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM