A pair of functions to replace every nth occurrence of a string with another string, starting at any position in the haystack. The first works on a string and the second works on a single-level array of strings, treating it as a single string for replacement purposes (any needles split over two array elements are ignored).Can be used for formatting dynamically-generated HTML output without touching the original generator: e.g. add a newLine class tag to every third item in a floated list, starting with the fourth item. <?phpfunction strnposr($haystack, $needle, $occurrence, $pos = 0) { return ($occurrence<2)?strpos($haystack, $needle, $pos):strnposr($haystack,$needle,$occurrence-1,strpos($haystack, $needle, $pos) + 1);}function str_replace_int($needle, $repl, $haystack, $interval, $first=1, $pos=0) { if ($pos >= strlen($haystack) or substr_count($haystack, $needle, $pos) < $first) return $haystack; $firstpos = strnposr($haystack, $needle, $first, $pos); $nl = strlen($needle); $qty = floor(substr_count($haystack, $needle, $firstpos + 1)/$interval); do { $nextpos = strnposr($haystack, $needle, ($qty * $interval) + 1, $firstpos); $qty--; $haystack = substr_replace($haystack, $repl, $nextpos, $nl); } while ($nextpos > $firstpos); return $haystack;} function arr_replace_int($needle, $repl, $arr, $interval, $first=1, $pos=0, $glue='|+|') { if (!is_array($arr)) return $arr; foreach($arr as $key=>$value){ if (is_array($arr[$key])) return $arr; } $haystack = implode($glue, $arr); $haystack = str_replace_int($needle, $repl, $haystack, $interval, $first, $pos); $tarr = explode($glue, $haystack); $i = 0; foreach($arr as $key=>$value){ $arr[$key] = $tarr[$i]; $i++; } return $arr;}?>If $arr is not an array, or a multilevel array, it is returned unchanged.