If you erect a fence of 10 panels, you'll need 11 fenceposts to hold it up. And if you write a program that joins together 10 elements on a line, you'll only need 9 separators between them - this is known as the "fencepost problem".
If you write a simple program loop to output each element from a list followed by a separator, you'll end with a spurious separator on the end of the line. Here's what I mean (in Python).
posts = ["apple","banana","cherry"]
panel = "and"
for place in posts:
print place,panel,
print
which gives the result
apple and banana and cherry and
It would be possible - but long winded - to print out the connecting panel only for the second and subsequent posts:
posts = ["apple","banana","cherry"]
panel = "and"
i = 0
for place in posts:
if i: print panel,
i += 1
print place,
print
but surely there's a better way?? Yes - there is.
In Python, the
join method lets me connect a list of strings using another string as the glue between them. My example becomes:
posts = ["kiwi","orange","pineapple"]
panel = " with "
salad = panel.join(posts)
print salad
which gives the result
kiwi with orange with pineapple
Link -
full source code
In Perl, the
join function performs the same task:
@salad = ("Cherry","Damson",Fig");
print (join(" and ",@salad));
With PHP, the function you'll use is
implode:
$salad = array("tangerine","pear","grape");
$fsal = implode(" and ",$salad);
(written 2006-01-10, updated 2006-06-09)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Y108 - Python - String Handling [324] The backtick operator in Python and Perl - (2005-05-25)
[463] Splitting the difference - (2005-10-13)
[496] Python printf - (2005-11-15)
[773] Breaking bread - (2006-06-22)
[903] Pieces of Python - (2006-10-23)
[943] Matching within multiline strings, and ignoring case in regular expressions - (2006-11-25)
[954] Splitting Pythons in Bradford - (2006-11-29)
[970] String duplication - x in Perl, * in Python and Ruby - (2006-12-07)
[1110] Python - two different splits - (2007-03-15)
[1195] Regular Express Primer - (2007-05-20)
[1517] Python - formatting objects - (2008-01-24)
[1608] Underlining in Perl and Python - the x and * operator in use - (2008-04-12)
[1876] Python Regular Expressions - (2008-11-08)
[2284] Strings as collections in Python - (2009-07-12)
[2406] Pound Sign in Python Program - (2009-09-15)
[2692] Flexible search and replace in Python - (2010-03-25)
[2721] Regular Expressions in Python - (2010-04-14)
[2765] Running operating system commands from your Python program - (2010-05-14)
[2780] Formatted Printing in Python - (2010-05-25)
[2814] Python - splitting and joining strings - (2010-06-16)
[3090] Matching to a string - what if it matches in many possible ways? - (2010-12-17)
[3218] Matching a license plate or product code - Regular Expressions - (2011-03-28)
[3349] Formatting output in Python through str.format - (2011-07-07)
[3468] Python string formatting - the move from % to str.format - (2011-10-08)
[3469] Teaching dilemma - old tricks and techniques, or recent enhancements? - (2011-10-08)
[3796] Backquote, backtic, str and repr in Python - conversion object to string - (2012-07-05)
[3886] Formatting output - why we need to, and first Python example - (2012-10-09)
[4027] Collections in Python - list tuple dict and string. - (2013-03-04)
[4152] Why are bus fares so high? - (2013-08-18)
[4213] Formatting options in Python - (2013-11-16)
[4307] Identifying and clearing denial of service attacks on your Apache server - (2014-09-27)
[4360] Python - comparison of old and new string formatters - (2014-12-22)
[4593] Command line parameter handling in Python via the argparse module - (2015-12-08)
[4595] Python formatting update - including named completions - (2015-12-10)
[4659] Prining a pound sign from Python AND running from the command line at the same time - (2016-03-03)
P208 - Perl - Lists [28] Perl for breakfast - (2004-08-25)
[140] Comparison Chart for Perl programmers - list functions - (2004-12-04)
[230] Course sizes - beware of marketing statistics - (2005-02-27)
[240] Conventional restraints removed - (2005-03-09)
[355] Context in Perl - (2005-06-22)
[622] Queues and barrel rolls in Perl - (2006-02-24)
[762] Huge data files - what happened earlier? - (2006-06-15)
[928] C++ and Perl - why did they do it THAT way? - (2006-11-16)
[968] Perl - a list or a hash? - (2006-12-06)
[1304] Last elements in a Perl or Python list - (2007-08-16)
[1316] Filtering and altering Perl lists with grep and map - (2007-08-23)
[1703] Perl ... adding to a list - end, middle, start - (2008-07-09)
[1828] Perl - map to process every member of a list (array) - (2008-10-09)
[1917] Out of memory during array extend - Perl - (2008-12-02)
[1918] Perl Socket Programming Examples - (2008-12-02)
[2067] Perl - lists do so much more than arrays - (2009-03-05)
[2226] Revision / Summary of lists - Perl - (2009-06-10)
[2295] The dog is not in trouble - (2009-07-17)
[2484] Finding text and what surrounds it - contextual grep - (2009-10-30)
[2813] Iterating over a Perl list and changing all items - (2010-06-15)
[2833] Fresh Perl Teaching Examples - part 2 of 3 - (2010-06-27)
[2996] Copying - duplicating data, or just adding a name? Perl and Python compared - (2010-10-12)
[3400] $ is atomic and % and @ are molecular - Perl - (2011-08-20)
[3548] Dark mornings, dog update, and Python and Lua courses before Christmas - (2011-12-10)
[3669] Stepping through a list (or an array) in reverse order - (2012-03-23)
[3870] Writing more maintainable Perl - naming fields from your data records - (2012-09-25)
[3906] Taking the lead, not the dog, for a walk. - (2012-10-28)
[3939] Lots of ways of doing the same thing in Perl - list iteration - (2012-12-03)
[4609] Mapping an array / list without a loop - how to do it in Perl 6 - (2016-01-03)
H107 - String Handling in PHP [31] Here documents - (2004-08-28)
[54] PHP and natural sorting - (2004-09-19)
[337] the array returned by preg_match_all - (2005-06-06)
[422] PHP Magic Quotes - (2005-08-22)
[493] Running a Perl script within a PHP page - (2005-11-12)
[558] Converting between acres and hectares - (2006-01-08)
[574] PHP - dividing a string up into pieces - (2006-01-23)
[589] Robust PHP user inputs - (2006-02-03)
[608] Don't expose your regular expressions - (2006-02-15)
[642] How similar are two words - (2006-03-11)
[716] Evaluating arithmetic expressions in configuration files - (2006-05-10)
[728] Looking ahead and behind in a Regular Expression - (2006-05-22)
[1008] Date conversion - PHP - (2006-12-26)
[1058] PHP Regular expression to extrtact link and text - (2007-01-31)
[1336] Ignore case in Regular Expression - (2007-09-08)
[1372] A taster PHP expression ... - (2007-09-30)
[1533] Short and sweet and sticky - PHP form input - (2008-02-06)
[1603] Do not SHOUT and do not whisper - (2008-04-06)
[1613] Regular expression for 6 digits OR 25 digits - (2008-04-16)
[1799] Regular Expressions in PHP - (2008-09-16)
[2046] Finding variations on a surname - (2009-02-17)
[2165] Making Regular Expressions easy to read and maintain - (2009-05-10)
[2238] Handling nasty characters - Perl, PHP, Python, Tcl, Lua - (2009-06-14)
[2629] Curly braces within double quoted strings in PHP - (2010-02-09)
[3020] Handling (expanding) tabs in PHP - (2010-10-29)
[3424] Divide 10000 by 17. Do you get 588.235294117647, 588.24 or 588? - Ruby and PHP - (2011-09-08)
[3515] PHP - moving from ereg to preg for regular expressions - (2011-11-11)
[3516] Regular Expression modifiers in PHP - summary table - (2011-11-12)
[3534] Learning to program in PHP - Regular Expression and Associative Array examples - (2011-12-01)
[3788] Getting more than a yes / no answer from a regular expression pattern match - (2012-06-30)
[3789] More than just matching with a regular expression in PHP - (2012-06-30)
[3790] Solution looking for a problem? Lookahead and Lookbehind - (2012-06-30)
[4071] Setting up strings in PHP - (2013-04-27)
[4072] Splitting the difference with PHP - (2013-04-27)
Some other Articles
Open Source training from Well House ConsultantsMerging pictures using PHP and GDSmoke and mirrorsPython's Generator functionsThe fencepost problem''I don't know'' is sometimes a good answerA new signColour doesn't have to mean colourfulHotel novelties