Question

I'm trying to add a newline \n, in my foreach statement with implode.

My code:

$ga->requestReportData($profileId,array('country'),array('visits')); 
$array = array();
foreach($ga->getResults() as $result){ 
    $array[] = "['".$result->getcountry()."', ".$result->getVisits()."]"; 
} 
echo implode(",\n", $array);

I only get a comma and a space between my results. I want a comma and a newline.

I am trying to get something like this:

['Country', 'number'],

['Country', 'number'],

['Country', 'number']

However I I get this:

['Country', 'number'], ['Country', 'number'], ['Country', 'number']

Why does my \n not cause a newline?

Was it helpful?

Solution

I suspect it is because you are echoing the data to the browser and it's not showing the line break as you expect. If you wrap your implode in the the <pre> tags, you can see it is working properly.

Additionally, your arguments are backwards on your implode function, according to current documentation. However, for historical reasons, parameters can be in either order.

$array = array('this','is','an','array');
echo "<pre>".implode(",\n",$array)."</pre>";

Output:

this,
is,
an,
array

OTHER TIPS

For cross-platform-compatibility use PHP_EOL instead of \n.

Using the example from the accepted answer above:

$array = array('this','is','another','way');
echo "<pre>".implode(PHP_EOL, $array)."</pre>";

If you're writing directly to HTML (it wouldn't work on files) there is an option of using <br> like this:

$array = array('this','is','another','way');
echo "<p>".implode(<br>, $array)."</p>";

Both output:

this, 
is, 
another, 
way

This can also work

$array = array('one','two','three','four');
echo implode("<br>", $array);

Output:

one
two
three
four

Many others claim you use the wrong order, that's only partial right, because the docs only recommend this, but you don't have to:

implode() can, for historical reasons, accept its parameters in either order. For consistency with explode(), however, it may be less confusing to use the documented order of arguments.

I think your problem is caused by how browsers interpret HTML. They don't care about newlines, they're like a normal space for them.

To show these linebreaks, you can use <pre><?php echo implode($glue, $array); ?></pre>. You could also use nl2br(implode(..)) or nl2br(implode(..), true) if you're writing XHTML.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top