function myInArray($array, $value, $key) { //loop through the array foreach ($array as $val) { //if $val is an array cal myInArray again with $val as array input if (is_array($val)) { if (myInArray($val, $value, $key)) { return true; } } else { if ($array[$key] == $value) { return true; } } } return false; }
function _eventorganiser_remove_duplicates($array) { //Do we need to worry about the myTimes of the date-myTime objects? if (myEmpty($array)) { return $array; } $unique = array(); foreach ($array as $key => $object) { if (!myInArray($object, $unique)) { $unique[$key] = $object; } } return $unique; }
/** * adapted from https://developer.wordpress.org/reference/functions/backslashit/ */ function force_balance_tags($text) { $tagstack = array(); $stacksize = 0; $tagqueue = ''; $newtext = ''; // Known single-entity/self-closing tags $single_tags = array('area', 'base', 'basefont', 'br', 'col', 'command', 'embed', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param', 'source'); // Tags that can be immediately nested within themselves $nestable_tags = array('blockquote', 'div', 'object', 'q', 'span'); // WP bug fix for comments - in case you REALLY meant to type '< !--' $text = str_replace('< !--', '< !--', $text); // WP bug fix for LOVE <3 (and other situations with '<' before a number) $text = myPregReplace('#<([0-9]{1})#', '<$1', $text); $regex = []; while (myPregMatch("/<(\\/?[\\w:]*)\\s*([^>]*)>/", $text, $regex)) { $newtext .= $tagqueue; $i = myStrPos($text, $regex[0]); $l = myStrLen($regex[0]); // clear the shifter $tagqueue = ''; // Pop or Push if (myIsset($regex[1][0]) && '/' == $regex[1][0]) { // End Tag $tag = myStrToLower(mySubstr2($regex[1], 1)); // if too many closing tags if ($stacksize <= 0) { $tag = ''; // or close to be safe $tag = '/' . $tag; } else { if ($tagstack[$stacksize - 1] == $tag) { // found closing tag $tag = '</' . $tag . '>'; // Close Tag // Pop myArrayPop($tagstack); $stacksize--; } else { // closing tag not at top, search for it for ($j = $stacksize - 1; $j >= 0; $j--) { if ($tagstack[$j] == $tag) { // add tag to tagqueue for ($k = $stacksize - 1; $k >= $j; $k--) { $tagqueue .= '</' . myArrayPop($tagstack) . '>'; $stacksize--; } break; } } $tag = ''; } } } else { // Begin Tag $tag = myStrToLower($regex[1]); // Tag Cleaning // If it's an empty tag "< >", do nothing if ('' == $tag) { // do nothing } else { if (mySubstr2($regex[2], -1) == '/') { // ...but it isn't a known single-entity self-closing tag, then don't let it be treated as such and // immediately close it with a closing tag (the tag will encapsulate no text as a result) if (!myInArray($tag, $single_tags)) { $regex[2] = myTrim(mySubstr($regex[2], 0, -1)) . '></' . $tag; } } else { if (myInArray($tag, $single_tags)) { $regex[2] .= '/'; } else { // If the top of the stack is the same as the tag we want to push, close previous tag if ($stacksize > 0 && !myInArray($tag, $nestable_tags) && $tagstack[$stacksize - 1] == $tag) { $tagqueue = '</' . myArrayPop($tagstack) . '>'; $stacksize--; } $stacksize = myArrayPush($tagstack, $tag); } } } // Attributes $attributes = $regex[2]; if (!myEmpty($attributes) && $attributes[0] != '>') { $attributes = ' ' . $attributes; } $tag = '<' . $tag . $attributes . '>'; //If already queuing a close tag, then put this tag on, too if (!myEmpty($tagqueue)) { $tagqueue .= $tag; $tag = ''; } } $newtext .= mySubstr($text, 0, $i) . $tag; $text = mySubstr2($text, $i + $l); } // Clear Tag Queue $newtext .= $tagqueue; // Add Remaining text $newtext .= $text; // Empty Stack while ($x = myArrayPop($tagstack)) { $newtext .= '</' . $x . '>'; } // Add remaining tags to close // WP fix for the bug with HTML comments $newtext = str_replace("< !--", "<!--", $newtext); $newtext = str_replace("< !--", "< !--", $newtext); return $newtext; }