Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
/**
 * 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})#', '&lt;$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;
}