从数组更改输出文本

时间:2014-08-05 18:44:23

标签: php arrays

我目前正在打印表格列名,已过滤,但需要更改每个列的文本。 例如,以下内容:

$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

3 个答案:

答案 0 :(得分:0)

你有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;

答案 1 :(得分:0)

您可以像这样更改数组中的每个项目;

$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

答案 2 :(得分:-1)

假设您在下面有以下名为$ 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>

我测试了它,似乎工作得很好!

为什么要投票?这个工作!!!!!