finding common prefix of array of strings

后端 未结 17 1638
一向
一向 2020-11-29 06:15

I have an array like this:

$sports = array(
\'Softball - Counties\',
\'Softball - Eastern\',
\'Softball - North Harbour\',
\'Softball - South\',
\'Softball -         


        
17条回答
  •  -上瘾入骨i
    2020-11-29 06:47

    Short and sweet version, perhaps not the most efficient:

    /// Return length of longest common prefix in an array of strings.
    function _commonPrefix($array) {
        if(count($array) < 2) {
            if(count($array) == 0)
                return false; // empty array: undefined prefix
            else
                return strlen($array[0]); // 1 element: trivial case
        }
        $len = max(array_map('strlen',$array)); // initial upper limit: max length of all strings.
        $prevval = reset($array);
        while(($newval = next($array)) !== FALSE) {
            for($j = 0 ; $j < $len ; $j += 1)
                if($newval[$j] != $prevval[$j])
                    $len = $j;
            $prevval = $newval;
        }
        return $len;
    }
    
    // TEST CASE:
    $arr = array('/var/yam/yamyam/','/var/yam/bloorg','/var/yar/sdoo');
    print_r($arr);
    $plen = _commonprefix($arr);
    $pstr = substr($arr[0],0,$plen);
    echo "Res: $plen\n";
    echo "==> ".$pstr."\n";
    echo "dir: ".dirname($pstr.'aaaa')."\n";
    

    Output of the test case:

    Array
    (
        [0] => /var/yam/yamyam/
        [1] => /var/yam/bloorg
        [2] => /var/yar/sdoo
    )
    Res: 7
    ==> /var/ya
    dir: /var
    

提交回复
热议问题