Tuesday, 15 March 2011

String parsing by character in PHP without foreach -



String parsing by character in PHP without foreach -

i next conversion in php:

from: "0110001" to: "tuesdays, wednesdays, sundays".

bonus points doing one:

from: "0110001" to: "tuesdays, wednesdays , sundays".

the input 7 characters, each represents day of week.

how can without foreach loop? utilize array_walk or array_reduce.

working solution foreach :

<?php function parsedays($str) { $days = array("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"); $result = array(); foreach (str_split($str) $k=>$v) { if ($v == '1') { $result[] = $days[$k]; } } homecoming join(', ', $result); } echo parsedays("0110001");

you can first version built-in functions:

$daynames = array( 'mondays', 'tuesdays', // etc ); $in = "0110001"; echo implode(', ', array_intersect_key($daynames, array_filter(str_split($in))));

how works:

split input array of ones , zeroes; crucially, keys of array match keys of $daynames. filter out zeroes; fortunately array_filter preserves keys. use array_intersect_key map keys values within $daynames. use implode create comma-separated list of above.

if want convert lastly comma "and", terse way regular look (personally find solution questionable although it's undeniably effective):

echo preg_replace('/,(?=[^,]+$)/', ' and', implode(...)); however

please don't forget best kind of code code not exist (guaranteed 0 bugs!), , sec best code understand eyes closed.

the code above not fall either of categories; professional recommendation utilize foreach if results in code familiar whoever going maintain it.

php string parsing

No comments:

Post a Comment